邮件发送软件_第1页
邮件发送软件_第2页
邮件发送软件_第3页
邮件发送软件_第4页
邮件发送软件_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1、设计要求要求能够方便地编辑和发送电子邮件, 并将带有附件的邮件发送至用户指定的邮箱 (可 以多个)。通过学习并掌握 System.Net.Mail 命名空间中相关的类(包括 Attachment 、 MailAddress 、 MailMessage 、SmtpClient 等)的使用。并考虑不使用SmtpCIient ,而是直接使用TCP套接字,编程实现SMTP协议的客户端相 关功能,最终实现简单邮件的发送。(1) 深入理解电子邮件系统的构成和SMTP协议的工作原理;(2)学习并掌握 System.Net.MaiI 命名空间中相关的类的使用;(3)完成客户发送客户端软件的开发和测试;(

2、4 )按照格式要求撰写设计报告。2、设计正文2.1、电子邮件服务简介电子邮件服务是互联网提供的一项重要服务。 它为互联网用户之间发送和接收消息提供 了一种快捷、 廉价的现代化通信手段。 早期的电子邮件系统只能传输西文文本信息, 而现在 的电子邮件系统不但可以传输各种文字的文本信息,而且还可以传输图像、 声音、视频等多媒体信息。与其他通信方式相比,电子邮件具有以下特点。 电子邮件比人工邮件传递迅速,可到达的范围广,而且比较可靠。 电子邮件与电话系统相比,它不要求通信双方都在现场, 而且不需要知道通信对象在网络中的具体位置。 电子邮件可以实现一对多的邮件发送,这样可以使一个用户向多个人发出通知的过

3、程变得很容易。 电子邮件可以将文字、 图像、语音等多种类型的信息集成在一个邮件中发送, 因此它 是多媒体信息传递的重要手段。2.1.1 电子邮件系统电子邮件系统采用客户机服务器工作模式。一个电子邮件系统包括三个主要的构件: 用户代理、邮件服务器和电子邮件使用的协议。用户代理是用户与电子邮件系统的接口,往往是运行于PC机上的一个程序,想用户提供友好的窗口界面,为用户发送或接受邮件。邮件服务器提供电子邮件的传输服务, 往往是运行于远端计算机上的服务器软件。 如果 考虑到发件与收件是异步发生的两个过程, 则又可以将其细分为邮件发送传输代理和邮件接收传输代理。电子邮件传输的客户机和服务器进程之间进行通

4、信的约定就是协议,主要有两个:一个是用于发送邮件,即 smtp,是smtp客户机与smtp服务器之间通信的约定;另一个用于接 收邮件,即pop3协议,是pop客户机与pop服务器之间通信的约定。由于本设计只要求发 送,所以只考虑smtp协议。邮件传送形象图示如下:2.1.2、SMTP协议的工作原理:SMTP是电子邮件系统中的一个重要协议,它负责将邮件从一个“邮局”传送到另一个“邮局”。SMTP的最大特点就是简单和直观,它不规定邮件的接收程序如何存储邮件,也 不规定邮件发送程序多长时间发送一次邮件,它只是规定发送程序和接收程序之间的命令和应答。SMTP邮件传输采用用客户机/服务器模式,邮件的接收

5、程序作为SMTP服务器在TCP的25端口守候,邮件的发送程序作为 SMTP客户机在发送前需要请求一条到 SMTP服务器 的连接。一旦连接建立成功,首发双方就可以传递命令、响应和邮件内容。SMTP邮件传递过程大致分为如下 3个阶段。 连接建立阶段:在这一阶段,SMTP客户机请求与服务器的 25端口建立一个 TCP连接。一旦连接建立,SMTP服务器和客户机就开始相互通报自己的域名,同时确认对方的域名。 邮件传递阶段:利用 MAIL、RCPT和DATA命令,SMTP将邮件的源地址、目的 地址和邮件的具体内容传递给 SMTP服务器。SMTP服务器进行相应的响应并接收邮件。 连接关闭阶段:SMTP客户机

6、发送QUIT命令,服务器在处理命令后进行响应,随 后关闭TCP连接。SMTP模型示意图:i I Iff Ct TVFlIsrirIIj +舟| 9*ft.4sSr- |CajpJli | Riefeiv=r |j h-f| srrp-smtf |+-iand Koh i 1I | File: J | and Kail 1|- | F i |j | Sy3t.erD| |I| ISysteinisenaer-sfTTPHodel for SMTP tsse2.1.3、TCP/IP互联网上电子邮件的传输过程在TCP/IP互联网中,邮件服务器之间使用简单邮件传输协议( SMTP相互传递电子 邮件。

7、用户需要发送电子邮件时,可以按照一定的格式起草、编辑一封邮件。在注明收件人的邮箱后提交给本机 SMTP客户机进程,有本机SMTP客户机进程负责邮件的发送工作。 本机SMTP客户机进程与本地邮件服务器的SMTP服务器建立连接,并按照 SMTP协议将邮件传递到该服务器。 本机服务器检查收到邮件的收件人邮箱是否处于本服务器中,如果是,就将该邮件保存在这个邮箱中;如果不是,则将该邮件交由本地邮件服务器的SMTP客户机进程处理。 本地服务器的 SMTP客户机程序直接向拥有收件人邮箱的远程邮件服务器发出请求,远程SMTP服务器进程响应,并按照 SMTP协议传递邮件。由于远程服务器拥有收件人的信箱,因此,邮

8、件服务器将邮件保存在该信箱中。邮件通信图:掠蛙盍.SMTP收件方SMTP22、System.Net.Mail命名空间中相关的类的使用2.2.1、Attachment表示电子邮件的附件Attachment类与 MailMessage类一起使用。所有邮件都包括Body,它包含邮件的内容。除了正文外,您可能还想发送其他文件。这些作为附件发送并表示为Attachment实例。若要将附件添加到邮件中,请将附件添加到MailMessage.Attachme nts集合中。附件内容可以是String 、Stream或文件名。可以使用任何 Attachment构造函数来指 定附件中的内容。附件的MIME Co

9、ntent-Type标头信息由 ContentType属性表示。Content-Type 标头指定媒体类型和子类型以及任何关联的参数。使用Co nte ntType 获取与附件关联的实例。MIME Con te nt-Dispositio n标头由 Con te ntDispositi on属性表示。Con te nt-Dispositio n标头指定附件的表示和文件时间戳。仅当附件是文件时才发送Con te nt-Dispositi on标头。使用Con te ntDispositi on属性可获取与附件关联的实例。MIME Content-Transfer-Encoding标头由 Tran

10、sferEncoding属性表示。2.2.2、MailAddress表示电子邮件发件人或收件人的地址SmtpClient 和 MailMessage 类使用MailAddress类来存储电子邮件的地址信息。一个邮件地址由User名称、Host名称和可选的 DisplayName组成。如果将非ASCII字符编码,则DisplayName可以包含这些字符。2.2.3、MailMessage表示可以使用 SmtpCIient类发送的电子邮件MailMessage类的实例用于构造可使用SmtpCIient类传输到SMTP服务器以便传递的电子邮件。若要指定电子邮件的发件人、收件人和内容,请使用 Mail

11、Message类的关联属性。邮件部分属性发件人From收件人To抄送(CC)CC密件抄送(BCC)Bcc附件Attachme nts主题Subject邮件正文Body使用AlternateViews属性指定一个电子邮件不同格式的副本。例如,如果您发送HTML格式的邮件,您可能希望同时提供邮件的纯文本格式,以防一些收件人使用的电子邮件阅读程序无法显示HTML内容。有关演示如何用替代视图创建邮件的示例,请参见Alter nateViews 。组织好电子邮件后,可以使用Send或SendAsync方法发送邮件。2.2.4、SmtpClient允许应用程序使用简单邮件传输协议(SMTP)来发送电子邮件

12、SmtpClie nt类用于将电子邮件发送到SMTP服务器以便传递。下表中显示的类用于构造可以使用SmtpClient发送的电子邮件。类说明Attachme表示文件附件。此类允许您将文件、流或文本附加到电子邮件中。ntMailAddr表示发件人和收件人的电子邮件地址。essMailMess表示电子邮件。age若要使用SmtpCIient 构造并发送电子邮件,必须指定以下信息:? 用来发送电子邮件的 SMTP主机服务器。? 身份验证凭据(如果 SMTP服务器要求)。? 发件人的电子邮件地址。? 收件人的电子邮件地址。?由M牛内容。若要在电子邮件中包括附件,首先使用Attachme nt类创建附件

13、,再使用 MailMessage.Attachme nts属性将附件添加到邮件中。根据收件人使用的电子邮件阅读程序和附件的文件类型,某些收件人可能无法阅读附件。对于那些无法以附 件的原始格式显示附件的客户端,可以通过使用MailMessage.AlternateViews 属性来指定替代视图。可以使用应用程序或计算机配置文件来指定所有SmtpCIie nt对象的默认主机、端口和凭据值。若要发送电子邮件并在等待电子邮件传输到SMTP服务器期间阻止其他操作, 请使用一个同步Send方法。若要允许程序的主线程在传输电子邮件的过程中继续执行,请使用一个异步SendAsync方法。SendAsync操作

14、完成时会引发 SendCompleted事件。若要接收此事 件,必须将 SendCompletedEventHandler 委托添加到 SendCompleted 中。Sen dCompletedEve ntHa ndler 委托必须引用处理 Sen dCompleted事件通知的回调方法。若 要取消异步电子邮件传输,请使用SendAsyncCancel方法。注意如果正在传输电子邮件时再次调用In validOperatio nExceptio n。SendAsync或 Send,则会接收到2.3、程序设计SMTP协议的设计中要求考虑不使用SmtpClient,而是直接使用TCP套接字,编程实

15、现客户端相关功能,最终实现简单邮件的发送。可是由于能力有限,没有完成该要求。using System;using System.Collect ion s.Ge neric;using System.Comp onen tModel;using System.Data;using System.Draw ing;using System.Text;using System.Wi ndows.Forms;using System.Text.RegularExpressi ons;using System.Net;usi ng System.Net.Mail;n amespace Sen dMai

16、lpublic partial class FormSe ndMail : Formpublic FormSendMail()InitializeComponent();/发件人地址改变时触发private void textBoxUserName_TextChanged(object sender, EventArgs e)/要求满足电子邮件格式labelUserName.Visible = !Regex.IsMatch(textBoxUserName.Text.Trim(),Aw+(-+.w+)*w+(-.w+)*.com$”);private void textBoxPassword_T

17、extChanged(object sender, EventArgs e)labelPassword.Visible = !Regex.lsMatch(textBoxPassword.Text, Aw6,20$);/收件人地址改变时触发private void textBoxReceive_TextChanged(object sender, EventArgs e)/要求满足电子邮件格式labelReceive.Visible = !Regex.lsMatch(textBoxReceive.Text.Trim(), A.1,$);/主题改变时触发private void textBoxSu

18、bject_TextChanged(object sender, EventArgs e)/不能为空labelSubject.Visible = !Regex.lsMatch(textBoxSubject.Text.Trim(), A.1,$);/发送内容改变时触发 private void textBoxBody_TextChanged(object sender, EventArgs e)/不能为空 labelBody.Visible = !Regex.lsMatch(textBoxBody.Text.Trim(), .1,$); /单击【发送】按钮触发的事件 private void b

19、uttonSend_Click(object sender, EventArgs e)string invalidString = ;if (labelUserName.Visible = true) invalidString += 用户名、 ;if (labelPassword.Visible = true) invalidString += 密码、 ;if (labelReceive.Visible = true) invalidString += 收件人、 ;if (labelSubject.Visible = true) invalidString += 主题、 ;if (label

20、Body.Visible = true) invalidString += 邮件内容、 ;if (invalidString.Length 0)MessageBox.Show(invalidString.TrimEnd( 、) + 不能为空或者有不符合规 定的内容 );else/发件人和收件人地址String toes = textBoxReceive.Text.Trim().Split(;);MailAddress from = new MailAddress(textBoxUserName.Text);MailAddress to = new MailAddress(toes0);Mail

21、Message message = new MailMessage(from, to);MailAddressCollection mac = message.To;for (lnt32 i = 1; i 0)for (int i = 0; i 0) listBox1.Items.AddRange(myOpenFileDialog.FileNames);2.4 、测试结果 代码运行之后的结果如图所示:在发送邮件的界面中主要涉及到发件人、收件人、邮件主题和添加附件。能够实现邮件的发送功能,并可以根据用户的需要添加附件。发送错误提示:发送成功页面:发送失败页面:岌医失败绘送甜件失败-! ! II,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论