System.Net.Mail命名空间是在.NET Framework中新增的,该命名空间提供了发送电子邮件的功能。System.Net.Mail命名空间包含用于将电子邮件发送到SMTP服务器的类,这些类需要结合Microsoft STMP Server一起使用。
概述 System.Net.Mail命名空间下有StmpClient类用于发送邮件,可以完全替代SmtpMail类。利用SmtpClient类的Send方法可以完成发送电子邮件的传输,也可以用SendAsync方法进行异步发送,后者发送完成后产生一个SendCompleted事件来通知发送结束。Send方法可以接受MailMessage类的对象作为参数。通过MailMessage类可以设置邮件更多的内容和格式,例如,为Attachment类设置添加附件的参数。 System.Net.Mail命名空间的类组成 SmtpClient类与SMTP结合在一起,通过MailMessage类、MailAddress类、Attachment类来丰富电子邮件的内容和设置。下面展示了用户通过System.Net.Mail命名空间下的类结合SMTP发送电子邮件的过程。
管理SMTP的类:SmtpClient类 SmtpClient类封装了将电子邮件发送到SMTP服务器的方法和属性。 SmtpCleint类用于让应用程序向Smtp服务器发送电子邮件,可以通过同步或者异步的方法发送电子邮件。通过结合MailMessage类使用,还可以设置邮件的格式、添加抄送人、添加附件等。 语法定义: SmtpClient类的语法定义如下: public class SmtpClient 下面的代码演示如何创建一个SmtpClient的实例 SmtpClient client = new SmtpClient("smpt.Sina.com"); //直接通过构造函数设置SMTP主机服务器 或: SmtpClient client = new SmtpClient(); Client.Host = "smtp.Sina.com"; // 通过Host属性来设置SMTP主机服务器 方法详解: SmtpClient类主要使用SMTP来同步或异步地发送电子邮件。其中最常用的方法及其说明如下: 发送电子邮件时,只要简单地调用Send方法就可以了,其中Send方法有两个重载: public void Send(MailMessage message) 其中,参数message是MailMessage类的一个实例。 public void Send(string from ,string recipients,string subject,string body) ,第二个有四个参数,其代表意义如下: from : 包含邮件发件人的地址信息。 recipients :包含邮件收件人的地址信息。 subject :包含邮件的主题行。 body :包含邮件的正文。 下面的代码演示了如何使用Send函数发送电子邮件: static void Main(string[] args) { SmtpClient client = new SmtpClient(); //此处省略了client属性设置代码 client.Send("FromMailBox@Sina.com", "ToMailBox@Sina.com","电子邮件示例","您好,收到了吗?"); Console.WriteLine("邮件已经成功发送到{0}","ToMailBox@Sina.com"); } 技巧:如果不想主线程等待传输电子邮件完成后再执行,可以使用异步SendAsync方法。SendAsync操作完成时会引发SendCompleted事件。
管理电子邮件内容的类:MailMessage类 MailMessage类的实例表示一个电子邮件的所有内容,并用SmtpClient类来传输到SMTP服务器。若要指定电子邮件的发件人、收件人和内容,可以是使用MailMessage类的相关属性。 MailMessage类是.NET Framework中管理邮件的专用类,表示可以使用SmtpClient类发送的电子邮件。该类提供了丰富的属性来创建电子邮件,例如可以用Attachments属性添加附件。当一个广告设计师要以网页的形式向客户发送某产品的广告,还需要抄送自己的上司时,则可以设置MailMessage类的IsBodyHtml属性为true,并在CC属性中添加其上司的电子邮箱地址来同时发送。 语法定义 该类的构造函数有三个重载。下面的代码演示如何创建一个MailMessage类的实例。 MailMessage message = new MailMessage(); //无参数 //通过构造函数设置SMTP主机服务器 MailMessage message = new MailMessage("smtp.sina.com"); //通过构造函数设置SMTP主机服务器和端口 MailMessage message = new MailMessage("smtp.sina.com",25); 属性详解 MailMessage 类除了继承父类的方法外,没有提供其他方法。但其提供了丰富的属性如下: 属性: AlternateViews : 为了防止有些电子邮件阅读程序无法显示HTML内容,该属性存储了邮件正文的替代形式的附件集合。 Attachments : 包含了此电子邮件的所有附件 Bcc : 包含此电子邮件密件抄送的收件人地址 Body: 邮件的正文 BodyEncoding : 邮件正文编码 CC :包含了所有此电子邮件抄送的收件人地址 DeliveryNotificationOptions : DeliveryNotificaionOptions枚举类型,确定此电子邮件的发送通知 From : 电子邮件发信人的地址 Headers : 电子邮件的标头 IsBodyHtml : Boolean值,设置邮件正文是文本还是Html格式,默认为文本 Priority : 电子邮件的优先级 ReplyTo : 电子邮件的回复地址,一般与发信人地址相同 Sender : 电子邮件发件人地址 Subject : 电子邮件的主题 SubjectEncoding : 电子邮件的主题内容的编码 To : 包含所有电子邮件的收件人的地址
例子: 使用MailMessage类设置电子邮件的内容
在上面代码中,用到了DeliveryNotificationOptions枚举类型。该类型有5个成员值,具体代表意义如下: Delay : 通知传送是否延迟 Never : 从不通知 None : 没有通知 OnFailure : 通知传送是否失败 OnSuccess : 通知传送是否成功
管理电子邮件地址类: MailAddress类 MailAddress 类表示电子邮件的地址。该类结合SmtpClient类或MailAddress类使用,其实例存储了电子邮件的地址信息。MailAddress类是.NET Framwork新增的类,可以设置电子邮件发件人或收件人的地址。通过该类的属性可以获取电子邮件地址的联系人的详细信息。例如电子邮件中显示联系人的名字和SMPT服务器上的用户名。 语法定义 该类的构造函数有三个重载,下面的代码演示了如何创建其实例: //指定电子邮件的地址构造一个新实例 MailAddress fromMailBox = new MailAddress("FromMailBox@Sina.com"); //指定电子邮件的地址和显示名称构造一个新实例 MailAddress fromMailBox = new MailAddress("FromMailBox@Sina.com","显示名称"); //指定电子邮件的地址、显示名称和显示名称的编码构造一个新实例 MailAddress fromMailBox = new MailAddress("FromMailBox@Sina.com","显示名称",System.Text.Encoding.Default); 属性详解 Address: 获取电子邮件的地址 DisplayName : 获取在电子邮件显示的名称 Host : 获取服务器名称,也就是在电子邮件地址@符号后的服务器名称 User : 获取用户名称,也就是在电子邮件地址@符号前的用户名
输出结果: 电子邮件地址是:FromMailBox@sina.com 显示名:张三 服务器名:sina.com 用户名:FromMailBox
表示电子邮件附件的类: Attachment类 Attachment类表示电子邮件的附件集合。该类结合了MailMessage类一起使用,可以为电子邮件添加附件。该类可以使用字符类型和数据流(Stream)的形式创建附件。支持数据流的形式就意味着能用任何的文件格式作为附件,例如TXT格式或DOC格式。 语法定义 public class Attachment: AttachmentBase 该类的构造函数有6个重载,下面演示创建一个Attachment类的实例的两种常用方式。 Attachment item = new Attachment(@"c:\附件.txt",MediaTypeNames.Text.Plain); 以上这种情况,第一个参数为附件的路径,第二个参数附件的MIME内容标头信息,简单来说就是表明文件的格式。 System.IO.FileInfo file = new System.IO.FileInfo(@"c:\附件.txt"); System.IO.FileStream stream = file.OpenRead(); Attachment item = new Attachment(stream,MediaTypeNames.Text.Plain); 第二种情况,第一个参数以数据流的方式传入。数据流可以从文件中读出,也可以从数据库中读出。第二个参数跟上一种情况相同。 方法详解: 除了通过new关键字实例化一个Attachment类对象外,还可以用Attachment类提供的静态方法CreateAttachmentFromString来创建该类的一个实例。下面的代码演示了如何使用CreateAttachmentFromString方法。 Attachment item = Attachment.CreateAttachmentFromString(@"c:\附件.txt",MediaTypeNames.Text.Plain);
属性详解: Attachment类通过一些属性来访问附件的内容,其中几个重要的属性及其说明如下: ContentDisposition : 附件的MIME内容处置 ContentStream : 附件的数据流 ContentType : 附件内容的类型 Name : 附件内容的类型名称 下面用例子说明Attachment类属性的用法: static void Main(string[] args) { Attachment content = new Attachment(@"c:\附件.txt",MediaTypeNames.Text.Plain); ContentDisposition dispositioin = content.ContentDispositioin; disposition.FileName= “文本附件”; Console.WriteLine("附件内容名称:{0} 类型名称:{1} 附件文件:{2}",content.Name,content.ContentType.MediaType,content.ContentDisposition.FileName); } 上面的代码输出结果为: 附件内容名称:附件.txt 类型名称:text/plain 附件文件:文本附件 典型应用:使用Attahment类添加电子邮件的附件 下面演示如何使用Attachment类为电子邮件添加一个文本附件,代码如下:
|
|