基于.NET Framework类库实现简单电子邮件发送系统

2019-01-11 06:00陈文兰
智能计算机与应用 2019年1期
关键词:收件人附件电子邮件

陈文兰

(南京市莫愁中等专业学校 电子信息系, 南京 210017)

1 .NET Framework及类库

.NET的核心是.NET Framework(微软.NET 框架体系)。.NET Framework有2个重要的组件,一是最基本的通用语言运行时库CLR(Common Language Runtime),是运行时的环境,提供程序编译、内存管理、安全性管理等功能,是执行管理代码的代理;二是具有多种处理功能的类库。.NET Framework类库是一个综合性的面向对象的可重用的类型集合,包括的类型有类、接口、委托、结构和枚举等。可以用类库来开发多种应用程序,这些应用程序包括字符用户界面(命令行)或图形界面(GUI)应用程序,也包括基于ASP.NET的应用程序。

.NET Framework类库是以多层嵌套的“命名空间”方式来组织“类”,或者说这些“类”分布在不同的“命名空间”中。命名空间是用来组织和重用代码的编译单元,也称“名称空间”或“名字空间”。因此,要使用命名空间所包含的类,通常使用using关键字来导入该命名空间。.NET类库位于命名空间“System”下,System命名空间包含了上百个类、接口、结构,涉及了多种重要的基本处理功能。System命名空间中还包含许多二级命名空间,如System. Net命名空间为网络使用的多种协议提供了编程接口。而System.Net.Sockets命名空间则为网络访问提供Windows Sockets接口的托管实现。作为程序开发者可以定义自己的类,从而扩展类库中的类。当然也可以定义专用的命名空间,这样可以避免自定义的“类”和其它“类”发生冲突。

2 电子邮件系统的工作过程

电子邮件系统按客户/服务器(Client/Server,简称C/S)模式工作。发件人通过电子邮件客户端中的邮件发送程序按照SMTP协议先与发件人邮箱所在的邮件服务器建立连接,再与收件人邮件服务器进行连接。如果收件人的邮箱存在,就将邮件传送给收件人邮件服务器,并由收件人邮件服务器将邮件放入收件人的邮箱。否则,发件人信箱服务器就会退回信件,同时通知发件人。

收件人任何时候在任何已经连接到互联网的终端(如计算机)上都可以检查并接收邮件。接收邮件时,收件人终端上运行的电子邮件客户端的邮箱访问程序会按照POP3协议或者IMAP4协议向收件人的邮件服务器提出收信请求,只要用户输入的身份信息(如用户名和密码)正确,就可以从自己的邮箱内读出邮件或下载邮件,工作过程如图1所示。

图1 电子邮件系统的工作过程

在电子邮件系统中,使用SMTP协议来发送电子邮件, 并控制信件中转方式。SMTP(Simple Mail Transfer Protocol)是一组用于由源地址到目的地址传送邮件的规则。 邮件服务器执行SMTP协议,检查是否有邮件需要发送和接收,并负责把要发送的电子邮件发送出去,把要接收的邮件放到收件人邮箱。SMTP协议是本文实现电子邮件发送系统的重要协议。

3 电子邮件发送系统实现

3.1 命名空间及相关类的使用

(1)System.Net.Mail命名空间。System.Net.Mail命名空间提供了发送电子邮件的基本功能,此命名空间中包含用于将电子邮件发送到SMTP服务器所需的类或枚举,成员有MailMessage、MailAddress、SmtpClient、Atachment、MailPriority、SmtpStatusCode等。

(2)MailMessage类。要成功发送一个邮件需涉及MailMessage类,该类用来定义邮件,包括内容、主题、收件人、发件人等信息。MailMessage类的主要属性有Attachment表示电子邮件的附件;MailAddress表示电子邮件发件人或收件人的地址;MailMessage表示可以使用SmtpClient类发送的电子邮件;SmtpClient允许应用程序使用简单邮件传输协议SMTP来发送电子邮件;MailPriority指定MailMessage的优先级。

(3)MailAddress类。用来定义收件人、发件人的地址。

(4)SmtpClient类。用来发送由MailMessage类定义好的邮件。SmtpClient类的主要属性有SmtpClient,初始化SmtpClient类的新实例;Credentials验证发件人的身份;Host获取或设置SMTP服务器名称或IP地址;Port获取或设置SMTP服务器端口。Send方法用于将电子邮件发送到SMTP服务器。

(5)Atachment类。若发送邮件时,需要发送附件,就用到Atachment类。此类用来定义邮件的附件,要和MailMessage配合使用。主要属性ContentDisposition用来获取附件内容的MIME描述;ContentType获取邮件附件内容的类型;TransferEncoding获取或指定邮件的编码类型。

3.2 发送电子邮件功能实现

以163的SMTP服务器为例,发送一个具有附件功能的电子邮件,关键代码运用如下:

//定义一个名为mm的MailMessage对象,对象sclient可以看作为一个邮件

MailMessage mm = new MailMessage();

//定义一个名为sclient的SmtpClient对象,对象mm可以看作为一个邮件服务器,这里使用了163邮件服务器

SmtpClient sclient = new SmtpClient("smtp.163.com");

//定义一个名为aFile的附件,附件所在路径为d: est.txt

Attachment aFile = new Attachment("d:\test.txt");

//定义发件人的地址

mm.From = new MailAddress("********@163.com");

//定义收件人的地址

mm.To.Add(new MailAddress("****@126.com");

//定义抄送人的地址

mm.CC.Add("****@qq.com");

//定义邮件的主题为“Hello”

mm.Subject ="Hello";

//定义邮件的内容关于中秋问候

mm.Body ="中秋节快乐!";

//添加一个附件

mm.Attachments.Add(aFile);

//提供一种验证方式

sclient.Credentials=CredentialCache.DefaultNetwork Credentials;

//通过一个名字为sclient的邮件服务器将邮件mm发出

sclient.Send(mm);

4 结束语

本文主要研究基于.NET Framework类库的简单电子邮件发送功能实现。在Visual Studio .NET 2010环境下,以面向对象且类型安全的程序设计语言C#作为编程语言,设计了简洁易操作的发送电子邮件功能界面,并详细说明了关键代码的运用。在程序调试过程中,出现了错误“不允许使用邮箱名称。服务器响应为: authentication is required.”,可以通过改变验证方式,将提供的验证指定为用户名和密码方式,即可排除此错误。最终测试,本文设计的电子邮件系统能够正常地发送邮件,且操作方便。

猜你喜欢
收件人附件电子邮件
有关旅行计划的电子邮件
查无此人
新型武器及附件展呈
德国军队使用的手枪套及其附件
名字说对了才能给你
小测试:你对电子邮件上瘾了吗?
点点鼠标,论坛附件一把抓
有奖问答
数码相机附件面面观
用PDA无线收发电子邮件