Asp.net 发送邮件代码

来源:互联网 发布:arm v7多核编程 编辑:程序博客网 时间:2024/05/17 15:06
说到发送邮件发送,先提一下SMTP。 SMTP的全称是“Simple Mail TransferProtocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP协议的发送邮件服务器。
 再简单介绍一下名称空间(NameSpace)System.Web.Mail类库里所提供的邮件发送的对象、属性和方法
        (1)它有三个类:SmtpMail、MailMessage和MailAttachment。这三个对象本文的示例程序代码中都应用到了!
        1. MailMessage ,提供属性和方法来创建一个邮件消息对象。
        (Provides properties and methods for constructing an e-mailmessage.)
        2. MailAttachments – 提供属性和方法来创建一个邮件附件对象。
        (Provides properties and methods for constructing an e-mailattachment.)
        3. SmtpMail – 提供属性和方法通过使用windows 2000 CDOSYS的消息组件的联合数据对象来发送邮件消息)。
        (Provides properties and methods for sending messages using theCollaboration Data Objects for Windows 2000 (CDOSYS) messagecomponent)
       (2)各个类的属性。
       1.先简单介绍SmtpMail的属性: SmtpServer -- SMTP的地址。
       2.主要来介绍MailMessage对象的属性
        From -- 发送邮件的地址
        To -- 接受邮件的地址
        Subject -- 邮件的标题
        Priority -- 邮件的优先级(有效值为High,Low,Normal)
        Attachments -- 返回一个集合,代表附件
        Bcc -- 密送地址
        Cc -- 抄送地址
        Body -- 获取或是设置电子邮件消息的内容
        BodyFormat --获取或是设置MailFormat的枚举值,此值指定消息体邮件的格式(Html格式、Text格式)
        Bodyencoding -- 指定消息的编码方式编码(主要有Base64,UUencode)
        其他几个不重要的省略。随便提到密送和抄送的区别:密送就是你群发邮件时收邮件的人无法看到你发给了多少人以及他们的邮件地址,抄送就是群发邮件时收邮件的人则可以看到你发给了多少人以及他们的邮件地址。            
        (3)SmtpMail类的Send方法,它的目的就是发送邮件,有两个重载方法。
        1. SmtpMail.Send("发送邮件的地址","接受邮件的地址","邮件的标题","邮件消息的内容")这个方法很简单,不适合发送带附件的邮件。
        2. SmtpMail.Send(MailMessage)此方法复杂、灵活,适合发送附件,而且可以设置MailMessage对象的各种属性值。如果我们用ASP.NET写一个邮件发送的程序,那么首先应该如何得到SMTP。有两种方法:第一种方法调用目前知名的邮件服务提供商的SMTP,比如新浪、搜狐、网易的免费电子邮箱的SMTP;第二种方法是自己装一个SMTP虚拟服务器,这个在安装IIS时一起装上去的(安装过程就省略了:-))。

 

 一、在ASP.NET利用知名的邮件服务提供商的SMTP来发送邮件
        首先需要去他们的邮件站点上注册免费邮箱,因为你要使用邮件服务提供商的SMTP,他们需要对身份进行验证,这样可以避免产生大量的垃圾邮件。假设我们在新浪的邮件站点(mail.sina.com.cn)上注册了一个免费电子邮件,用户名是fei_880221,密码是520520.我们在新浪的邮件站点获知它的SMTP地址是:smtp.sina.com.cn。我们需要向56381234@@qq.com发送邮件。那么利用ASP.NET(C#)发送邮件的核心代码如下:

       using System.Web.Mail;
       MailMessage objMailMessage;
       MailAttachment objMailAttachment;
       // 创建一个附件对象
       objMailAttachment = new MailAttachment( "d:\\test.txt");//发送邮件的附件
       // 创建邮件消息
       objMailMessage = new MailMessage();
       objMailMessage.From = "mailto:fei_880221.com%22;//源邮件地址
       objMailMessage.To = "mailto:563812344@qq.com";//目的邮件地址
       objMailMessage.Subject = "邮件发送标题:你好!";//发送邮件的标题
       objMailMessage.Body = "邮件发送标内容:测试一下是否发送成功!";//发送邮件的内容
       objMailMessage.Attachments.Add( objMailAttachment);//将附件附加到邮件消息对象中
       //接着利用sina的SMTP来发送邮件,需要使用Microsoft .NET Framework SDKv1.1和它以上的版本
       //基本权限
       objMailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate","1");
       //用户名
        objMailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername","fei_880221") ;
        //密码
        objMailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword","520520");
        /如果没有上述三行代码,则出现如下错误提示:服务器拒绝了一个或多个收件人地址。服务器响应为: 554 : Client hostrejected: Access denied
       //SMTP地址
       SmtpMail.SmtpServer = "smtp.sina.com.cn";
       //开始发送邮件
       SmtpMail.Send( objMailMessage );

        二、在ASP.NET利用本机的SMTP虚拟服务器的SMTP来发送邮件
        首先说一下SMTP配置。
       (1)右键点击“SMTP虚拟服务器”选择“属性”->在“常规”选项卡中设置“IP地址(P)”,我设置的是192.168.1.1。
       (2)选择“访问”选项卡,点击“中继”,选上“仅以下列表”(默认是被选上的),点击“添加”,在“单台计算机”中加入192.168.1.1。
        提示,如果没有完成(2),则会出现大家常见的一种错误提示:服务器拒绝了一个或多个收件人地址。服务器响应为: 550 5.7.1Unable to relay for 563812344@qq.com
 
        using System.Web.Mail;
        MailMessage objMailMessage;
        MailAttachment objMailAttachment;
        // 创建一个附件对象
        objMailAttachment = new MailAttachment( "d:\\test.txt");//发送邮件的附件
        // 创建邮件消息
        objMailMessage = new MailMessage();
        objMailMessage.From = "mailto:fei_880221@sina.com;//源邮件地址
        objMailMessage.To = "mailto:563812344@qq.com";//目的邮件地址
        objMailMessage.Subject = "邮件发送标题:你好!";//发送邮件的标题
        objMailMessage.Body = "邮件发送标内容:测试一下是否发送成功!";//发送邮件的内容
        objMailMessage.Attachments.Add( objMailAttachment);//将附件附加到邮件消息对象中
        //SMTP地址
        SmtpMail.SmtpServer = "192.168.1.1";
        //开始发送邮件
        SmtpMail.Send( objMailMessage ); 


下面是我自己在项目中作的一个真实的例子,相当于上面的第二个方法!

1.首先到导入命名空间
    ///<summary>
    ///Register后发送邮件
    ///</summary>
    ///<paramname="email"></param>
    ///<paramname="customer"></param>
    public voidRegisterSend(string emailAddress,string userName,stringuserPass)
    {
       MailMessage objMailMessage;

       //创建邮件消息
       objMailMessage = new MailMessage();
       //发送地址
       objMailMessage.From = "xinuo_keji@163.com";
 //接收地址
       objMailMessage.To = emailAddress;
       //设置邮件正文内容的类型,这里因为是需要在内容中写条超连接,所以需要html格式
       objMailMessage.BodyFormat = MailFormat.Html;
       //邮件主题
       objMailMessage.Subject = "感谢您的使用!";
       //邮件内容       
       objMailMessage.Body ="请点击以下连接进行注册确认!<br><ahref='http://localhost:1055/CMS/RegistorReturn.aspx?un="+userName+"&up="+userPass+"'>点击此处</a>";
       //服务器端的ip,因为我们用的是本地的虚拟smtp服务器,所以只需要填写本地ip地址
       SmtpMail.SmtpServer = "192.168.0.123";
       //发送
       SmtpMail.Send(objMailMessage);
    }

第二种方法我成功但他总是会发到邮箱的垃圾邮件里! 

0 0
原创粉丝点击