System.Net.Mail

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属性中添加其上司的电子邮箱地址来同时发送。

语法定义
public class MailMessage : IDisposable

该类的构造函数有三个重载。下面的代码演示如何创建一个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类设置电子邮件的内容

static void Main(string[] args)

{

    SmptClient client = new SmptClient();

    //此处省略SmtpClient类的其他属性设置

    MailMessage message = new MailMessage();

    //添加密件抄送人,可以添加多个

    message.Bcc.Add("First@domian.com");

    message.Bcc.Add("Second@domain.com");

    message.Body = "这是邮件的正文部分";

    //设置正文的编码形式,这里的设置为取系统默认编码

    message.BodyEncoding = System.Text.Encoding.Default;

    //添加一般抄送人,可以添加多个

    message.Bcc.Add(“First@domain.com”);

    message.Bcc.Add(Second@domain.com);

    //邮件传送通知选项

    message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;

    message.From  = new MailAddress(FromMailBox@sina.com");

     message.IsBodyHtml = false;

    //设置邮件的优先级为正常

     message.Priority = MailPriority.Normal;

     message.ReplyTo= new MailAddress("FromMailBox@sina.com");

     message.Sender = new MailAddress("FromMailBox@sina.com");

     message.Subject = "这是邮件的主题":

    //设置主题的编码形式,这里的设置为取系统默认编码

     message.SubjectEncoding = System.Text.Encoding.Default;

     Client.Send(message) ;   //发送成功

     Console.WriteLine("发送成功!");

}

在上面代码中,用到了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 : 获取用户名称,也就是在电子邮件地址@符号前的用户名

static void Main(string[] args)

{

    MailAddress  FromMailBox = new MailMessage("FromMailBox@sina.com","张三");

   Console.WriteLine("电子邮件地址是:{0} 显示名:{1} 服务器名:{2}  用户名:{3}",

    FromMailBox.Address,FromMailBox.DisplayName,FromMailBox.Host,FromMailBox.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类为电子邮件添加一个文本附件,代码如下:

 static void Main(string[] args)

{

   SmtpClient client = new SmtpClient();

   //此处省略SmtpClient的其他属性设置

    MailMessage message = new MailMessage();

    message.Body = "这是邮件的正文部分";

    //设置正文的编码形式,这里的设置为系统默认编码

     message.BodyEncoding = System.Text.Encoding.Default;

    message.From = new MailAddress("FromMailBox@sina.com");

    message.IsBodyHtml = false;

    message.ReplyTo = new MailAddress("FromMailBox@sina.com");

     message.Sender = new MailAddress("FromMailBox@sina.com");

     message.Subject = "这是邮件的主题";

     //附件添加

     Attachment content = new Attachment(@"c:\附件.txt",MediaTypeNames.Text.Plain);

     message.Attachments.add(content);

      //设置主题的编码形式,这里的设置为系统默认编码

     message.SubjectEncoding = System.Text.Encoding.Default;

     client.Send(message);  //发送邮件

     Console.WriteLine("发送成功!");

}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值