叶檀为何法国高铁没有信号事故Word下载.docx
《叶檀为何法国高铁没有信号事故Word下载.docx》由会员分享,可在线阅读,更多相关《叶檀为何法国高铁没有信号事故Word下载.docx(33页珍藏版)》请在冰豆网上搜索。
6软件运行时的界面28
6.1新建邮件帐号28
6.2发送邮件界面29
6.2.1发送不带附件的邮件29
6.2.2发送带附件的邮件29
6.3验证邮件发送是否成功30
7系统测试31
7.1同一SMTP服务器发送邮件的测试31
7.1.1同一服务器,发送一封纯文本邮件的测试32
7.1.2同一服务器,发送一封带附件的邮件的测试32
7.2利用不同的SMTP服务器发送邮件的测试32
8结论33
参考文献34
电子邮件客户端软件
摘要:
电子邮件在当今社会中扮演了一个很重要的角色。
越来越多的人在使用它。
而且用它的人数势必会继续增加。
虽然,现在已经有很多的邮件收发软件例如著名的FoxMail但是对于大多数的非专业的人来说它还是有点难度稍嫌负责。
因此,我们就利用SMTP和Pop协议从底层开发了这个软件。
SMTP全称是简单邮件传输协议,它专门用来发送邮件用的。
Pop全称是邮局协议,是专门用于接收邮件的。
我主要是负责如何实现发送邮件功能的。
MailSend命名空间是我整个程序的核心。
它包括两个类。
在SmtpMail的类中包含了一个SendMail的方法,它从底层详细地实现了和服务器的交互操作。
你既可以用它发送一个纯文本邮件,也可以发送一个带有附件的邮件,理所当然地,你也可以使用不同的SMTP服务器。
经过测试,证实此软件是一个支持多收信人,多附件的群发软件。
虽然它没有FoxMail那么强大的功能,但是它容易掌握和使用。
关键词:
SMTP,命名空间,类,附件
1引言
1.1电子邮件介绍
电子邮件(简称E-mai1)又称电子信箱、电子邮政,它是—种用电子手段提供信息交换的通信方式。
它是全球多种网络上使用最普遍的一项服务。
这种非交互式的通信,加速了信息的交流及数据传送,它是—个简易、快速的方法。
通过连接全世界的Internet,实现各类信号的传送、接收、存贮等处理,将邮件送到世界的各个角落。
到目前为止,可以说电子邮件是Internet资源使用最多的一种服务,E-mai1不只局限于信件的传递,还可用来传递文件、声音及图形、图像等不同类型的信息。
电子邮件不是一种“终端到终端”的服务,是被称为“存贮转发式”服务。
这正是电子信箱系统的核心,利用存贮转发可进行非实时通信,属异步通信方式。
即信件发送者可随时随地发送邮件,不要求接收者同时在场,即使对方现在不在,仍可将邮件立刻送到对方的信箱内,且存储在对方的电子邮箱中。
接收者可在他认为方便的时候读取信件,不受时空限制。
在这里,“发送”邮件意味着将邮件放到收件人的信箱中,而“接收”邮件则意味着从自己的信箱中读取信件,信箱实际上是由文件管理系统支持的—个实体。
因为电子邮件是通过邮件服务器(mai1server)来传递档的。
通常mailserver是执行多任务操作系统UNIX的计算机,它提供24小时的电子邮件服务,用户只要向mailserver管理人员申请—个信箱账号,就可使用这项快速的邮件服务。
电子邮件的工作原理:
[1]电子邮件系统是一种新型的信息系统,是通信技术和计算机技术结合的产物。
电子邮件的传输是通过电子邮件简单传输协议(SimpleMailTransferProtocol,简称SMTP)这一系统软件来完成的,它是Internet下的一种电子邮件通信协议。
[2]电子邮件的基本原理,是在通信网上设立“电子信箱系统”,它实际上是一个计算机系统。
系统的硬件是一个高性能、大容量的计算机。
硬盘作为信箱的存储介质,在硬盘上为用户分一定的存储空间作为用户的“信箱”,每位用户都有属于自己的—个电子信箱。
并确定—个用户名和用户可以自己随意修改的口令。
存储空间包含存放所收信件、编辑信件以及信件存盘三部分空间,用户使用口令开启自己的信箱,并进行发信、读信、编辑、转发、存档等各种操作。
系统功能主要由软件实现。
[3]电子邮件的通信是在信箱之间进行的。
用户首先开启自己的信箱,然后通过键入命令的方式将需要发送的邮件发到对方的信箱中。
邮件在信箱之间进行传递和交换,也可以与另—个邮件系统进行传递和交换。
收方在取信时,使用特定账号从信箱提取。
1.2开发背景
当前流行的各大邮件客户端软件的除了最主要的收发信件之外,功能越来越复杂,但是人们平常真正用到的功能很少,很多功能尤其对于那些计算机知识相对缺乏的人来说,更加显得太过于华丽而不太实用。
有鉴于此,在了解RFC底层协议的基础上,我们开发了这个各种功能相对简单实用的邮件客户端程序,简化了很多不必要的功能。
1.3开发环境及运行环境
1.3.1开发环境
(1)AMDAthlon(TM),2G内存,1024G硬盘。
(2)Microsoft®
Windows™VistaUltimate。
(3)Microsoft®
VisualStudio2005(C#)。
(4)Microsoft®
DeveloperNetworkforVisualStudio.NET2005。
1.3.2运行环境
(1)Intel®
Pentium®
2及以上处理器,32M以上内存,4G以上硬盘。
Windows™9X/NT操作系统。
(3)800*600或以上的屏幕分辨率。
(4)确保机器上安装有.NetFrameWork1.0或者以上版本。
2软件架构及系统用例图
2.1系统架构
软件的总体架构如图2.1:
主要功能选择
用户
主界面
接收邮件类
发送邮件类
图2.1软件架构图
2.2系统总体用例
图2.2系统总体用例图
2.3程序功能框图
图2.3程序功能图
2.4发送邮件类
是发送邮件的核心,类名为SmtpMail,隶属于命名空间MailSend。
封装了发送邮件的具体实现方法,也是具体的RFC用代码实现的过程。
而用户通过具体的操作接口,接口与SmtpMail类通过交互操作来实现用户发送信件的操作。
2.5附加小功能类
是获取一些诸如系统时间,当前用户名,以及本机IP之类的类,类名为AddExtra,隶属于命名空间MailSend。
3SMTP协议的研究
由于要开发的是邮件客户端程序,就不得不用到SMTP协议和POP协议。
而我个人负责的是邮件发送功能的实现,因此就必然会涉及到SMTP(SimpleMailTransferProtocol)协议。
SMTP被用来在因特网上发送邮件,该协议规定了一些基本的命令和方法使客户端与服务器进行交互,以达到发送邮件的目的。
3.1SMTP协议简介及工作原理
3.1.1介绍
简单邮件传输协议(SMTP)的目标是可靠高效地传送邮件,它独立于传送子系统而且仅要求一条可以保证传送数据单元顺序的通道。
SMTP的一个重要特点是它能够在传送中接力传送邮件,传送服务提供了进程间通信环境(IPCE),此环境可以包括一个网络,几个网络或一个网络的子网。
理解到传送系统(或IPCE)不是一对一的是很重要的。
进程可能直接和其它进程通过已知的IPCE通信。
邮件是一个应用程序或进程间通信。
邮件可以通过连接在不同IPCE上的进程跨网络进行邮件传送。
更特别的是,邮件可以通过不同网络上的主机接力式传送。
3.1.2SMTP模型
SMTP设计基于以下通信模型:
针对用户的邮件请求,发送SMTP建立与接收SMTP之间建立一个双向传送通道。
接收SMTP可以是最终接收者也可以是中间传送者。
SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方面传送。
一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。
如果SMTP接收者可以接收邮件则返回OK应答。
SMTP发送者再发出RCPT命令确认邮件是否接收到。
如果SMTP接收者接收,则返回OK应答;
如果不能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此重复多次。
当接收者收到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应答。
SMTP提供传送邮件的机制,如果接收方与发送方连接在同一个传送服务下时,邮件可以直接由发送方主机传送到接收方主机;
或者,当两者不在同一个传送服务下时,通过中继SMTP服务器传送。
为了能够对SMTP服务器提供中继能力,它必须拥有最终目的主机地址和邮箱名称。
MAIL命令参数是回复路径,它指定邮件从何处来;
而RCPT命令的参数是转发路径的,它指定邮件向何处去。
向前路径是源路径,而回复路径是返回路径(它用于发生错误时返回邮件)。
当同一个消息要发往不同的接收者时,SMTP遇到了向不同接收者发送同一份数据的复制品的问题,邮件命令和应答有一个比较奇怪的语法,应答也有一个数字代码。
在下面,例子中可以看到哪些使用实际的命令和应答。
完整的命令和应答在第四节。
命令与应答对大小写不敏感,也就是说,命令和应答可以是大写,小写或两者的混合,但这一点对用户邮件名称却不一定是对的,因为有的主机对用户名大小写是敏感的。
这样SMTP实现中就将用户邮箱名称保留成初始时的样子,主机名称对大小写不敏感。
命令与应答由ASCII字母表组成,当传送服务提供8位字节传送通道,每7位字符正确传送,而最高位被填充为0。
当指定一般的命令或应答格式后,参数会由一些类似于语言的字符串表示出来,如"
<
string>
"
或"
reverse-path>
,这里尖括号表示这是一种类似于语言的变量。
3.2SMTP协议的命令和应答
3.2.1SMTP协议的命令
SMTP命令定义了邮件传输或由用户定义的系统功能。
它的命令是由<
CRLF>
结束的字符串。
而在带有参数的情况下,命令本身由<
SP>
和参数分开,如果未带参数可以直接和<
连接。
邮箱的语法格式必须和接收站点的格式一致。
下面讨论SMTP命令和应答。
发送邮件操作涉及到不同的数据对象,它们由不同的参数相互连接。
回复路径就是MAIL命令的参数,而转发路径则是RCPT命令的参数,邮件日期是DATA命令的参数。
这些参数或者数据对象必须跟在命令后。
这种模式也就要求有不同的缓冲区来存储这些对象,也就是说,有一个回复路径缓冲区,一个转发路径缓冲区,一个邮件内容缓冲区。
特定的命令产生自己的缓冲区,或使一个或多个缓冲的内容被清除。
[1]HELLO(HELO)
此命令用于向接收SMTP确认发送SMTP。
参数域包括发送SMTP的主机名。
接收SMTP通过连接确认命令来向发送SMTP确认接收SMTP。
引命令和OK响应确认发送和接收SMTP进入了初始状态,也就是说,没有操作正在执行,所有状态表和缓冲区已经被子清除。
[2]MAIL(MAIL)
此命令用于开始将邮件发送到一个多个邮箱中。
参数域包括回复路径。
返回路径中包括了可选的主机和发送者邮箱列表。
当有主机列表时,它是一个回复路径源,它说明此邮箱是由在表中的主机一一传递发送(第一个主机是最后一个接收到此邮件的主机)过来的。
此表也有作向发送者返回非传递信号的源路径。
因为每个传递主机地址都被加在此表起始处,它就必须使用发送IPCE而不是接收IPCE(如果它们不是一个IPCE的话)清楚的名称。
一些出错信息的回复路径可能就是空的。
此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将此命令的回复路径信息插入到回复路径缓冲区中。
[3]RECIPIENT(RCPT)
此命令用于确定邮件内容的唯一接收者;
多个接收者将由多个此命令指定。
转发路径中包括一个可选的主机和一个必须的目的邮箱。
当出现主机列表时,这就是一个源路径,它指明邮件必须向列表中的上一个主机发送。
如果接收SMTP未实现邮件的传递发送,就会返回如未知本地用户(550)的信息给用户。
当邮件被传递发送时,传递主机必须将自己的名称由转发路径的开始处移至回复路径的结束处。
当邮件最终到达目的地时,接收SMTP将以它的主机邮件格式自己的名称插入目标邮件中。
例如,由传递主机A接收的带有如下参数的邮件时,
FROM:
USERX@HOSTY.ARPA>
TO:
@HOSTA.ARPA,@HOSTB.ARPA:
USERC@HOSTD.ARPA>
将会变成如下形式:
FROM:
@HOSTA.ARPA:
@HOSTB.ARPA:
.
此命令导致它的转发路径参数加入转发路径缓冲区中。
[4]DATA(DATA)
接收者将跟在命令后的行作为邮件内容。
此命令导致此命令后的邮件内容加入邮件内容缓冲区。
邮件内容可以包括所有128个ASCII码字符。
邮件内容由只包括一个句号的行结束,也就是如下的字符序列:
.<
,它指示了邮件的结束。
邮件内容的结束指示要求接收者现在就处理保存的邮件内容。
此过程将回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区的内容全部清空。
如果操作成功,接收者必须返回OK应答;
如果失败也必须返回失败应答。
当接收SMTP收到一条信息时,无论是用作转发还是此邮件已经到达目的地,它都必须在邮件内容的开始处加上时间戳这一行,这一行指示了接收到邮件主机和发出此邮件主机的标识,以及接收到邮件内容的时间和日期。
转发的信件将有多行这样的时间戳。
当接收SMTP作最后一站的传送时,它将返回路径信息行插入邮件中。
此行包括了发送命令中的<
的信息。
在这里,最后一站的传送的意思是邮件将被送到目的用户手中,但在一些情况下,邮件可能需要更进一步的加工并由另外的邮件系统传送。
可能在返回路径中的邮箱与实际发送的邮件不一致,这个情况可能发生在需要传送一个特定的错误处理信箱而不是信件发送者那里。
上面所述说明了,最后的邮件内容由一个返回路径行,和在其后的一个或多个时间戳行构成。
这些行后面是邮件内容的头和体信息。
当处理后面的邮件数据指示部分成功时就需要特定的说明。
这种情况可能发生在发送SMTP发现当邮件需要传送给多个用户时,只能够成功地向其中的一部分发送信息这种情况下。
在这种情况下,必须对DATA命令发送OK应答,而接收SMTP组织并发送一个"
不可传递邮件"
信息到信息的发送者。
在此信息中或者发送一个不成功接收者的列表,或者每次发送一个不成接收者,而发送多次。
所有不可传递邮件信息由MAIL命令发送。
返回路径和接收时间戳例子
Return-Path:
<
@GHI.ARPA,@DEF.ARPA,@ABC.ARPA:
JOE@ABC.ARPA>
Received:
fromGHI.ARPAbyJKL.ARPA;
27Oct8115:
27:
39PST
fromDEF.ARPAbyGHI.ARPA;
15:
13PST
fromABC.ARPAbyDEF.ARPA;
01:
59PST
Date:
01PST
From:
JOE@ABC.ARPA
Subject:
ImprovedMailingSystemInstalled
To:
SAM@JKL.ARPA
Thisistoinformyouthat...
[5]SEND(SEND)
此命令用于开始一个发送命令,将邮件发送到一个或多个终端上。
参数域包括了一个回复路径,此命令如果成功就将邮件发送到终端上了。
回复路径包括一个可选的主机列表和发送者邮箱。
当出现主机列表时,表示这是一个传送路径,邮件就是经过这个路径上的每个主机发送到这里的(列表上第一个主机是最后经手的主机)。
此表用于返回非传递信号到发送者。
[6]SENDORMAIL(SOML)
此命令用于开始一个邮件操作将邮件内容传送到一个或多个终端上,或者传送到邮箱中。
对于每个接收者,如果接收者终端打开,邮件内容将被传送到接收者的终端上,否则就送到接收者的邮箱中。
参数域包括回复路径,如果成功地将信息送到终端或邮箱中此命令成功。
[7]SENDANDMAIL(SAML)
此命令用于开始一个邮件操作将邮件内容传送到一个或多个终端上,并传送到邮箱中。
如果接收者终端打开,邮件内容将被传送到接收者的终端上和接收者的邮箱中。
参数域包括回复路径,如果成功地将信息送到邮箱中此命令成功。
[8]RESET(RSET)
此命令指示当送邮件操作将被放弃。
任何保存的发送者,接收者和邮件内容应该被抛弃,所有缓冲区和状态表应该被清除,接收方必须返回OK应答。
[9]VERIFY(VRFY)
此命令要求接收者确认参数是一个用户。
如果这是(已经知道的)用户名,返回用户的全名和指定的邮箱。
此命令对回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区没有影响。
[10]EXPAND(EXPN)
此命令要求接收者确认参数指定了一个邮件发送列表,如果是一个邮件发送列表,就返回表中的成员。
[11]HELP(HELP)
此命令导致接收者向HELP命令的发送者发出帮助信息。
此命令可以带参数,并返回特定的信息作为应答。
[12]NOOP(NOOP)
此命令不影响任何参数和已经发出的命令。
它只是说明没有任何操作而不是说明接收者发送了一个OK应答。
[13]QUIT(QUIT)
此命令指示接收方必须发送OK应答然后关闭传送信道。
接收方在接到QUIT命令并做出响应之前不应该关闭通信信道。
发送方在发送QUIT命令和接收到响应之前也不应该关闭信道。
即使出错,也不应该关闭信道。
如果连接被提前关闭,接收方应该象接收到RSET命令一样,取消所有等待的操作,但不恢复原先已经做过的操作。
而发送方应该象接收到暂时错误(4XX)一样假定命令和操作仍在支持之中。
[14]TURN(TURN)
此命令指定接收方要么发送OK应答并改变角色为发送SMTP,要么发送拒绝信息并保持自己的角色。
如果程序A现在是发送SMTP,它发出TURN命令后接收到OK(250)应答,它就变成了接收SMTP。
程序A就进入初始状态,好象通信信道刚打开一样,这时它发送220准备好服务信号。
如果程序B现在是接收SMTP,它发出TURN命令后接收到OK(250)应答,它就变成了发送SMTP。
程序A就进入初始状态,好象通信信道刚打开一样,这时它准备接收220准备好服务信号。
若要拒绝改变角色,接收方可以发送502应答。
对于这些命令的顺序有一定的限制。
对话的第一个命令必须是HELLO命令,此命令在此后的会话中也可以使用。
如果HELLO命令的参数不可接受,必须由返回一个501失败应答,同时接收到的SMTP必须保持在与刚才一致的状态下。
NOOP,HELP,EXPN和VRFY命令可以在会话的任何时候使用。
MAIL,SEND,SOML或SAML命令开始一个邮件操作。
一旦开始了以后就要发送RCPT和DATA命令。
邮件操作可以由RSET命令终止。
在一个会话中可以有一个或多个操作。
如果在操作开始参数不可接受,必须返回501失败应答,同时接收到的SMTP必须保持在与刚才一致的状态下。
如果操作中的命令顺序出错,必须返回503失败应答,同时接收到的SMTP必须保持在与刚才一致的状态下。
会话的最后一个命令必须是QUIT命令。
此命令在会话的其它时间不能使用。
COMMAND语法格式
命令是由命令码和其后的参数域组成的。
命令码是四个字母组成的,不区别大小写。
因为下面的命令的作用是相同的:
MAILMailmailMaIlmAIl
这对于引导任何参数值的标记也是适用的,如TO和to就是一样的。
命令码和参数由一个或多个空格分开。
然而在回复路径和转发路径中的参数是区别大小写的。
特别是在一些主机上,"
smith"
和"
Smith"
就根本不是一个用户。
参数域由不定长的字符串组成,它由<
结束,接收方在完全接收到此序列前不会采取任何行动。
方括号代表可选的参数域。
如果不选择的话,系统选择默认的设置。
下面是SMTP命令:
HELO<
domain>
MAIL<
FROM:
RCPT<
TO:
forward-path>
DATA<
RSET<
SEND<
SOML<
SAML<
re