asp.net发送邮件

最近tonny让我做一个发邮件的模块,问我做过没?我很坦然,米有,但是我可以学...

好吧,他说,那你就试着研究研究....

恩,以前完全没做过这类东西,怎么开始?baidu,google先派上用场,搜索框中键入asp.net 发送邮件,哇,这种东西的确很多,一大堆一大堆的,眼都看花,各种乱..

于是乎,ctrl+c,ctrl+v一大段下来再说,好了,各种下划红线出现了,各种过时出现了,请您用XXX替换...根据提示,慢慢查阅msdn文档,倒也慢慢有了些眉目...

原来,所谓的过时,用的是.net 1.1中 System.Web.Mail这个类库,而现在俨然已经发展到4.0了,当然过时了啊...提示用System.Net.Mail替换,那就替换吧...一步一步的...

其实嘛,参照MailMessage这个类下的属性,再想象一下发邮件的过程,其实也是很简答的.

发邮件,你首先要有发件人啊,那就有From这个属性...

其次,你得有收件人啊,那就有To这个属性...

当然,主题,正文,抄送.....都有的,依次类推.....名字都顾名思义...

蛮好理解的...依次把这个属性赋值就差不多拉...

当然,你要用别人的邮箱发送的话,当然要知道别人邮件服务器的地址啊,还得是免费的吧,我想....

在网上找了一下,发现163的邮箱服务器地址smtp.163.com

于是乎,便出现了

 

SmtpClient client = new SmtpClient(strServer);

就是用某一地址填充服务器内容啊....也还好理解了...

当然,如果偶用163的邮箱发邮箱的话,那么当我用.net程序登陆邮箱的时候需要有一个验证啊,必须知道我的用户名和密码啊...

那么这个NetworkCredential东东就可以派上用场了...

这个类下面有很多构造函数,我选定的是

public NetworkCredential(string userName, string password);

还有选定域的(domain)ps:在公司的话,一个域里就不需要验证了,我试着在公司内部发送邮件,这部分验证的就没设计,只需填写收件人,发件人,以及公司的邮件服务器就可以发送了...

当然,还可以添加附件的,比如桌面的某一个东西,下面的语句便可完成附件的添加,当然是实实在在存在的东西了...:-D

 

message.Attachments.Add(new Attachment(@"C:\Documents and Settings\tmac_\桌面\delegate.pdf"))

至此,基本准备工作都完成的差不多了,接下来SmtpClient类下实例的sent方法便可以完成邮件发送工作,而无需再去理睬底层的tip,ip,socket这些头疼的东西了...

基本上,就是这个思路..我把它写成了一个方法,以便调用....

 

 public bool SendMail(string strFrom, string strTo, string strSubject, string StrBody, string strUserName, string strPwd, string strServer, string cc)
    {
        
try
        {
            MailMessage message 
= new MailMessage(strFrom, strTo, strSubject, StrBody);
            SmtpClient client 
= new SmtpClient(strServer);
            client.Credentials 
= new NetworkCredential(strUserName, strPwd);
            
if (cc.Length != 0)
            {
                
string[] strCcs = cc.Split(',');
                
foreach(string strCc in strCcs)
                {
                    MailAddress copy 
= new MailAddress(strCc);
                    message.CC.Add(copy);
                }
            }
            
//message.Attachments.Add(new Attachment(@"C:\Documents and Settings\tmac_\桌面\delegate.pdf"));
            client.Send(message);
            
return true;
        }
        
catch
        {
           
return false;
        }
    }

差不多就是这样吧...

但是,还有一点没搞明白的...就是如果上传附件的话,我要取文件的绝对路径,也就是像C:\Documents and Settings\tmac_\桌面\delegate.pdf这样的路径,我在公司的话用this.FileUpload1.PostedFile.FileName就能取到...但是我回家就只能取到delegate.pdf这个东西了,非常奇怪非常奇怪...有图片为证...先上家的图片,明天再传公司的图片...

就是只取到文件名了,我靠...明儿再贴公司的...奇了怪..

posted @ 2009-11-10 20:52  Tmac_  阅读(343)  评论(1)    收藏  举报