收藏 分享(赏)

电子邮件客户端软件.doc

上传人:wo7103235 文档编号:6152668 上传时间:2019-03-30 格式:DOC 页数:38 大小:339.50KB
下载 相关 举报
电子邮件客户端软件.doc_第1页
第1页 / 共38页
电子邮件客户端软件.doc_第2页
第2页 / 共38页
电子邮件客户端软件.doc_第3页
第3页 / 共38页
电子邮件客户端软件.doc_第4页
第4页 / 共38页
电子邮件客户端软件.doc_第5页
第5页 / 共38页
点击查看更多>>
资源描述

1、第 I 页 共 II 页电子邮件客户端软件摘要电子邮件在当今社会中扮演了一个很重要的角色。越来越多的人在使用它。而且用它的人数势必会继续增加。虽然,现在已经有很多的邮件收发软件例如著名的FoxMail 但是对于大多数的非专业的人来说它还是有点难度稍嫌负责。因此,我们就利用 SMTP 和 Pop 协议从底层开发了这个软件。SMTP 全称是简单邮件传输协议,它专门用来发送邮件用的。Pop 全称是邮局协议,是专门用于接收邮件的。我主要是负责如何实现发送邮件功能的。MailSend 命名空间是我整个程序的核心。它包括两个类。在 SmtpMail 的类中包含了一个 SendMail 的方法,它从底层详细

2、地实现了和服务器的交互操作。你既可以用它发送一个纯文本邮件,也可以发送一个带有附件的邮件,理所当然地,你也可以使用不同的 SMTP 服务器。经过测试,证实此软件是一个支持多收信人,多附件的群发软件。虽然它没有 FoxMail 那么强大的功能,但是它容易掌握和使用。关键词:SMTP,命名空间,类,附件目 录1 引言 111 电子邮件介绍 112 开发背景 213 开发环境及运行环境 22 软件架构及系统用例图 321 系统架构 322 系统总体用例 324 发送邮件类 4第 II 页 共 II 页25 附加小功能类 43 SMTP 协议的研究 431 SMTP 协议简介及工作原理 532 SMT

3、P 协议的命令和应答 6321 SMTP 协议的命令 64 RFC8221441 RFC822 简单介绍 1442 信件的头部 145 命名控件 MailSend2051 发送邮件类 SmtpMail2052 AddExtra 类 27521 调用 Windows API 所需的命名空间 28523 在程序中具体的使用 286 软件运行时的界面 2961 新建邮件帐号 297 系统测试 3271 同一 SMTP 服务器发送邮件的测试 3272 利用不同的 SMTP 服务器发送邮件的测试 328 结论 34参考文献 35致 谢 36外文文献原文译文第 1 页 共 36 页1 引言11 电子邮件介

4、绍电子邮件(简称 E-mai1)又称电子信箱、电子邮政,它是种用电子手段提供信息交换的通信方式。它是全球多种网络上使用最普遍的一项服务。这种非交互式的通信,加速了信息的交流及数据传送,它是个简易、快速的方法。通过连接全世界的 Internet,实现各类信号的传送、接收、存贮等处理,将邮件送到世界的各个角落。到目前为止,可以说电子邮件是 Internet 资源使用最多的一种服务, E-mai1 不只局限于信件的传递,还可用来传递文件、声音及图形、图像等不同类型的信息。电子邮件不是一种“终端到终端”的服务,是被称为“存贮转发式”服务。这正是电子信箱系统的核心,利用存贮转发可进行非实时通信,属异步通

5、信方式。即信件发送者可随时随地发送邮件,不要求接收者同时在场,即使对方现在不在,仍可将邮件立刻送到对方的信箱内,且存储在对方的电子邮箱中。接收者可在他认为方便的时候读取信件,不受时空限制。在这里,“发送”邮件意味着将邮件放到收件人的信箱中,而“接收”邮件则意味着从自己的信箱中读取信件,信箱实际上是由文件管理系统支持的个实体。因为电子邮件是通过邮件服务器(mai1 server)来传递档的。通常 mail server 是执行多任务操作系统 UNIX 的计算机,它提供 24 小时的电子邮件服务 ,用户只要向 mail server 管理人员申请 个信箱账号,就可使用这项快速的邮件服务。电子邮件的

6、工作原理:1) 电子邮件系统是一种新型的信息系统,是通信技术和计算机技术结合的产物。 电子邮件的传输是通过电子邮件简单传输协议(Simple Mail Transfer Protocol,简称SMTP)这一系统软件来完成的,它是 Internet 下的一种电子邮件通信协议。 2) 电子邮件的基本原理,是在通信网上设立“电子信箱系统” ,它实际上是一个计算机系统。系统的硬件是一个高性能、大容量的计算机。硬盘作为信箱的存储介质,在硬盘上为用户分一定的存储空间作为用户的“信箱” ,每位用户都有属于自己的个电子信箱。并确定个用户名和用户可以自己随意修改的口令。存储空间包含存放所收信件、编辑信件以及信件

7、存盘三部分空间,用户使用口令开启自己的信箱,并进行发信、读信、编辑、转发、存档等各种操作。系统功能主要由软件实现。3) 电子邮件的通信是在信箱之间进行的。用户首先开启自己的信箱,然后通过键第 2 页 共 36 页入命令的方式将需要发送的邮件发到对方的信箱中。邮件在信箱之间进行传递和交换,也可以与另个邮件系统进行传递和交换。收方在取信时,使用特定账号从信箱提取。12 开发背景当前流行的各大邮件客户端软件的除了最主要的收发信件之外,功能越来越复杂,但是人们平常真正用到的功能很少,很多功能尤其对于那些计算机知识相对缺乏的人来说,更加显得太过于华丽而不太实用。有鉴于此,在了解 RFC 底层协议的基础上

8、,我们开发了这个各种功能相对简单实用的邮件客户端程序,简化了很多不必要的功能。13 开发环境及运行环境131 开发环境AMD Athlon(TM),512M 内存,80G 硬盘Microsoft Windows XP ProfessionalMicrosoft Visual Studio 2003(C Sharp)Microsoft Developer Network for Visual Studio.NET 2003132 运行环境Intel Pentium 2 及以上处理器,32M 以上内存,4G 以上硬盘Microsoft Windows 9X/NT 操作系统800*600 或以上的屏

9、幕分辨率确保机器上安装有.Net FrameWork 1.0 或者以上版本第 3 页 共 36 页2 软件架构及系统用例图21 系统架构软件的总体架构如图 2.1:图 2.1 软件架构图22 系统总体用例用户 新建账号发送邮件接收邮件纯文本邮件带附件邮件图 2.2 系统总体用例图23 程序功能框图用户主界面主要功能选择发送邮件类 接收邮件类第 4 页 共 36 页客户端软件电子邮件接收系统 电子邮件接收系统附加功能各种错误的提示简单邮件接收带有附件的邮件接收简单邮件发送带有附件的邮件发送电子邮件编写电子邮件的分类管理通讯簿管理图 2.3 程序功能图24 发送邮件类是发送邮件的核心,类名为 Sm

10、tpMail,隶属于命名空间 MailSend。封装了发送邮件的具体实现方法,也是具体的 RFC 用代码实现的过程。而用户通过具体的操作接口,接口与 SmtpMail 类通过交互操作来实现用户发送信件的操作。25 附加小功能类是获取一些诸如系统时间,当前用户名,以及本机 IP 之类的类,类名为AddExtra,隶属于命名空间 MailSend。3 SMTP 协议的研究由于要开发的是邮件客户端程序,就不得不用到 SMTP 协议和 POP 协议。而我个人负责的是邮件发送功能的实现,因此就必然会涉及到 SMTP(Simple Mail Transfer Protocol)协议。SMTP 被用来在因特

11、网上发送邮件,该协议规定了一些基本的命令和第 5 页 共 36 页方法使客户端与服务器进行交互,以达到发送邮件的目的。31 SMTP 协议简介及工作原理311 介绍简单邮件传输协议(SMTP )的目标是可靠高效地传送邮件,它独立于传送子系统而且仅要求一条可以保证传送数据单元顺序的通道。SMTP 的一个重要特点是它能够在传送中接力传送邮件,传送服务提供了进程间通信环境(IPCE) ,此环境可以包括一个网络,几个网络或一个网络的子网。理解到传送系统(或 IPCE)不是一对一的是很重要的。进程可能直接和其它进程通过已知的IPCE 通信。邮件是一个应用程序或进程间通信。邮件可以通过连接在不同 IPCE

12、 上的进程跨网络进行邮件传送。更特别的是,邮件可以通过不同网络上的主机接力式传送。312 SMTP 模型 SMTP 设计基于以下通信模型:针对用户的邮件请求,发送 SMTP 建立与接收SMTP 之间建立一个双向传送通道。接收 SMTP 可以是最终接收者也可以是中间传送者。SMTP 命令由发送 SMTP 发出,由接收 SMTP 接收,而应答则反方面传送。一旦传送通道建立,SMTP 发送者发送 MAIL 命令指明邮件发送者。如果 SMTP接收者可以接收邮件则返回 OK 应答。SMTP 发送者再发出 RCPT 命令确认邮件是否接收到。如果 SMTP 接收者接收,则返回 OK 应答;如果不能接收到,则

13、发出拒绝接收应答(但不中止整个邮件操作) ,双方将如此重复多次。当接收者收到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回 OK 应答。SMTP 提供传送邮件的机制,如果接收方与发送方连接在同一个传送服务下时,邮件可以直接由发送方主机传送到接收方主机;或者,当两者不在同一个传送服务下时,通过中继 SMTP 服务器传送。为了能够对 SMTP 服务器提供中继能力,它必须拥有最终目的主机地址和邮箱名称。MAIL 命令参数是回复路径,它指定邮件从何处来;而 RCPT 命令的参数是转发路径的,它指定邮件向何处去。向前路径是源路径,而回复路径是返回路径(它用于发生错误时返回邮件) 。当同一

14、个消息要发往不同的接收者时,SMTP 遇到了向不同接收者发送同一份数据的复制品的问题,邮件命令和应答有一个比较奇怪的语法,应答也有一个数字代码。第 6 页 共 36 页在下面,例子中可以看到哪些使用实际的命令和应答。完整的命令和应答在第四节。命令与应答对大小写不敏感,也就是说,命令和应答可以是大写,小写或两者的混合,但这一点对用户邮件名称却不一定是对的,因为有的主机对用户名大小写是敏感的。这样 SMTP 实现中就将用户邮箱名称保留成初始时的样子,主机名称对大小写不敏感。命令与应答由 ASCII 字母表组成,当传送服务提供 8 位字节传送通道,每 7 位字符正确传送,而最高位被填充为 0。当指定

15、一般的命令或应答格式后,参数会由一些类似于语言的字符串表示出来,如“或“ ,这里尖括号表示这是一种类似于语言的变量。32 SMTP 协议的命令和应答321 SMTP 协议的命令SMTP 命令定义了邮件传输或由用户定义的系统功能。它的命令是由结束的字符串。而在带有参数的情况下,命令本身由和参数分开,如果未带参数可以直接和 连接。邮箱的语法格式必须和接收站点的格式一致。下面讨论 SMTP 命令和应答。发送邮件操作涉及到不同的数据对象,它们由不同的参数相互连接。回复路径就是 MAIL 命令的参数,而转发路径则是 RCPT 命令的参数,邮件日期是 DATA 命令的参数。这些参数或者数据对象必须跟在命令

16、后。这种模式也就要求有不同的缓冲区来存储这些对象,也就是说,有一个回复路径缓冲区,一个转发路径缓冲区,一个邮件内容缓冲区。特定的命令产生自己的缓冲区,或使一个或多个缓冲的内容被清除。HELLO (HELO)此命令用于向接收 SMTP 确认发送 SMTP。参数域包括发送 SMTP 的主机名。接收 SMTP 通过连接确认命令来向发送 SMTP 确认接收 SMTP。引命令和 OK 响应确认发送和接收 SMTP 进入了初始状态,也就是说,没有操作正在执行,所有状态表和缓冲区已经被子清除。MAIL (MAIL) 此命令用于开始将邮件发送到一个多个邮箱中。参数域包括回复路径。返回路径中包括了可选的主机和发

17、送者邮箱列表。当有主机列表时,它是一个回复路径源,它说明此邮箱是由在表中的主机一一传递发送(第一个主机是最后一个接收到此邮件的第 7 页 共 36 页主机)过来的。此表也有作向发送者返回非传递信号的源路径。因为每个传递主机地址都被加在此表起始处,它就必须使用发送 IPCE 而不是接收 IPCE(如果它们不是一个 IPCE 的话)清楚的名称。一些出错信息的回复路径可能就是空的。此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将此命令的回复路径信息插入到回复路径缓冲区中。RECIPIENT (RCPT)此命令用于确定邮件内容的唯一接收者;多个接收者将由多个此命令指定。转发路径中包括一

18、个可选的主机和一个必须的目的邮箱。当出现主机列表时,这就是一个源路径,它指明邮件必须向列表中的上一个主机发送。如果接收 SMTP 未实现邮件的传递发送,就会返回如未知本地用户(550)的信息给用户。当邮件被传递发送时,传递主机必须将自己的名称由转发路径的开始处移至回复路径的结束处。当邮件最终到达目的地时,接收 SMTP 将以它的主机邮件格式自己的名称插入目标邮件中。例如,由传递主机 A 接收的带有如下参数的邮件时,FROM:TO:将会变成如下形式:FROM:TO:.此命令导致它的转发路径参数加入转发路径缓冲区中。DATA (DATA)接收者将跟在命令后的行作为邮件内容。此命令导致此命令后的邮件

19、内容加入邮件内容缓冲区。邮件内容可以包括所有 128 个 ASCII 码字符。邮件内容由只包括一个句号的行结束,也就是如下的字符序列:“.“,它指示了邮件的结束。邮件内容的结束指示要求接收者现在就处理保存的邮件内容。此过程将回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区的内容全部清空。如果操作成功,接收者必须返回 OK 应答;如果失败也必须返回失败应答。当接收 SMTP 收到一条信息时,无论是用作转发还是此邮件已经到达目的地,它都必须在邮件内容的开始处加上时间戳这一行,这一行指示了接收到邮件主机和发出此邮件主机的标识,以及接收到邮件内容的时间和日期。转发的信件将有多行这样的时间戳。当接收 SM

20、TP 作最后一站的传送时,它将返回路径信息行插入邮件中。此行第 8 页 共 36 页包括了发送命令中的的信息。在这里,最后一站的传送的意思是邮件将被送到目的用户手中,但在一些情况下,邮件可能需要更进一步的加工并由另外的邮件系统传送。可能在返回路径中的邮箱与实际发送的邮件不一致,这个情况可能发生在需要传送一个特定的错误处理信箱而不是信件发送者那里。上面所述说明了,最后的邮件内容由一个返回路径行,和在其后的一个或多个时间戳行构成。这些行后面是邮件内容的头和体信息。当处理后面的邮件数据指示部分成功时就需要特定的说明。这种情况可能发生在发送 SMTP 发现当邮件需要传送给多个用户时,只能够成功地向其中

21、的一部分发送信息这种情况下。在这种情况下,必须对 DATA 命令发送 OK 应答,而接收 SMTP 组织并发送一个“ 不可传递邮件 “信息到信息的发送者。在此信息中或者发送一个不成功接收者的列表,或者每次发送一个不成接收者,而发送多次。所有不可传递邮件信息由MAIL 命令发送。返回路径和接收时间戳例子Return-Path: Received: from GHI.ARPA by JKL.ARPA ; 27 Oct 81 15:27:39 PSTReceived: from DEF.ARPA by GHI.ARPA ; 27 Oct 81 15:15:13 PSTReceived: from A

22、BC.ARPA by DEF.ARPA ; 27 Oct 81 15:01:59 PSTDate: 27 Oct 81 15:01:01 PST From: JOEABC.ARPA Subject: Improved Mailing System Installed To: SAMJKL. ARPA This is to inform you that . SEND (SEND)此命令用于开始一个发送命令,将邮件发送到一个或多个终端上。参数域包括了一个回复路径,此命令如果成功就将邮件发送到终端上了。 回复路径包括一个可选的主机列表和发送者邮箱。当出现主机列表时,表示这是一个传送路径,邮件就是经

23、过这个路径上的每个主机发送到这里的(列表上第一个主机是最后经手的主机) 。此表用于返回非传递信号到发送者。因为每个传递主机地址都第 9 页 共 36 页被加在此表起始处,它就必须使用发送 IPCE 而不是接收 IPCE(如果它们不是一个IPCE 的话)清楚的名称。一些出错信息的回复路径可能就是空的。此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将此命令的回复路径信息插入到回复路径缓冲区中。SEND OR MAIL (SOML)此命令用于开始一个邮件操作将邮件内容传送到一个或多个终端上,或者传送到邮箱中。对于每个接收者,如果接收者终端打开,邮件内容将被传送到接收者的终端上,否则就

24、送到接收者的邮箱中。参数域包括回复路径,如果成功地将信息送到终端或邮箱中此命令成功。回复路径包括一个可选的主机列表和发送者邮箱。当出现主机列表时,表示这是一个传送路径,邮件就是经过这个路径上的每个主机发送到这里的(列表上第一个主机是最后经手的主机) 。此表用于返回非传递信号到发送者。因为每个传递主机地址都被加在此表起始处,它就必须使用发送 IPCE 而不是接收 IPCE(如果它们不是一个IPCE 的话)清楚的名称。一些出错信息的回复路径可能就是空的。此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将此命令的回复路径信息插入到回复路径缓冲区中。SEND AND MAIL (SAML

25、)此命令用于开始一个邮件操作将邮件内容传送到一个或多个终端上,并传送到邮箱中。如果接收者终端打开,邮件内容将被传送到接收者的终端上和接收者的邮箱中。参数域包括回复路径,如果成功地将信息送到邮箱中此命令成功。回复路径包括一个可选的主机列表和发送者邮箱。当出现主机列表时,表示这是一个传送路径,邮件就是经过这个路径上的每个主机发送到这里的(列表上第一个主机是最后经手的主机) 。此表用于返回非传递信号到发送者。因为每个传递主机地址都被加在此表起始处,它就必须使用发送 IPCE 而不是接收 IPCE(如果它们不是一个IPCE 的话)清楚的名称。一些出错信息的回复路径可能就是空的。此命令清除回复路径缓冲区

26、,转发路径缓冲区和邮件内容缓冲区,并且将此命令的回复路径信息插入到回复路径缓冲区中。RESET (RSET)此命令指示当送邮件操作将被放弃。任何保存的发送者,接收者和邮件内容应该第 10 页 共 36 页被抛弃,所有缓冲区和状态表应该被清除,接收方必须返回 OK 应答。VERIFY (VRFY)此命令要求接收者确认参数是一个用户。如果这是(已经知道的)用户名,返回用户的全名和指定的邮箱。此命令对回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区没有影响。EXPAND (EXPN)此命令要求接收者确认参数指定了一个邮件发送列表,如果是一个邮件发送列表,就返回表中的成员。如果这是(已经知道的)用户名,

27、返回用户的全名和指定的邮箱。此命令对回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区没有影响。HELP (HELP)此命令导致接收者向 HELP 命令的发送者发出帮助信息。此命令可以带参数,并返回特定的信息作为应答。此命令对回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区没有影响。NOOP (NOOP) 此命令不影响任何参数和已经发出的命令。它只是说明没有任何操作而不是说明接收者发送了一个 OK 应答。此命令对回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区没有影响。QUIT (QUIT)此命令指示接收方必须发送 OK 应答然后关闭传送信道。接收方在接到 QUIT 命令并做出响应之前不应该关闭通信信

28、道。发送方在发送 QUIT 命令和接收到响应之前也不应该关闭信道。即使出错,也不应该关闭信道。如果连接被提前关闭,接收方应该象接收到 RSET 命令一样,取消所有等待的操作,但不恢复原先已经做过的操作。而发送方应该象接收到暂时错误(4XX)一样假定命令和操作仍在支持之中。TURN (TURN)此命令指定接收方要么发送 OK 应答并改变角色为发送 SMTP,要么发送拒绝信息并保持自己的角色。如果程序 A 现在是发送 SMTP,它发出 TURN 命令后接收到OK(250)应答,它就变成了接收 SMTP。程序 A 就进入初始状态,好象通信信道刚打开一样,这时它发送 220 准备好服务信号。如果程序

29、B 现在是接收 SMTP,它发出TURN 命令后接收到 OK(250)应答,它就变成了发送 SMTP。程序 A 就进入初始状第 11 页 共 36 页态,好象通信信道刚打开一样,这时它准备接收 220 准备好服务信号。若要拒绝改变角色,接收方可以发送 502 应答。对于这些命令的顺序有一定的限制。对话的第一个命令必须是 HELLO 命令,此命令在此后的会话中也可以使用。如果 HELLO 命令的参数不可接受,必须由返回一个501 失败应答,同时接收到的 SMTP 必须保持在与刚才一致的状态下。 NOOP,HELP,EXPN 和 VRFY 命令可以在会话的任何时候使用。MAIL, SEND,SOM

30、L 或 SAML 命令开始一个邮件操作。一旦开始了以后就要发送RCPT 和 DATA 命令。邮件操作可以由 RSET 命令终止。在一个会话中可以有一个或多个操作。如果在操作开始参数不可接受,必须返回 501 失败应答,同时接收到的 SMTP 必须保持在与刚才一致的状态下。如果操作中的命令顺序出错,必须返回 503 失败应答,同时接收到的 SMTP 必须保持在与刚才一致的状态下。会话的最后一个命令必须是 QUIT 命令。此命令在会话的其它时间不能使用。COMMAND 语法格式命令是由命令码和其后的参数域组成的。命令码是四个字母组成的,不区别大小写。因为下面的命令的作用是相同的:MAIL Mail

31、 mail MaIl mAIl这对于引导任何参数值的标记也是适用的,如 TO 和 to 就是一样的。命令码和参数由一个或多个空格分开。然而在回复路径和转发路径中的参数是区别大小写的。特别是在一些主机上,“smith“ 和“Smith“ 就根本不是一个用户。参数域由不定长的字符串组成,它由结束,接收方在完全接收到此序列前不会采取任何行动。方括号代表可选的参数域。如果不选择的话,系统选择默认的设置。下面是 SMTP 命令: HELO MAIL FROM: RCPT TO: DATA RSET SEND FROM: SOML FROM: 第 12 页 共 36 页SAML FROM: VRFY EX

32、PN HELP NOOP QUIT TURN 322 SMTP 的应答码对 SMTP 命令的响应是多样的,它确定了在邮件传输过程中请求和处理的同步,也保证了发送 SMTP 知道接收 SMTP 的状态。每个命令必须有且只有一个响应。SMTP 响应由三位数字组成,其后跟一些文本。数字帮助决定下一个应该进入的状态,而文本对人是有意义的。三位的响应已经包括了足够的信息,不用再阅读文本,文本可以直接抛弃或者传递给用户。特别的是,文本是与接收和环境相关的,所以每次接收到的文本可能不同。在附录 E 中可以看到全部的响应码。正规的情况下,响应由下面序列构成:三位的数字,一行文本和一个,或者也可以是一个多行响应

33、。只有 EXPN 和 HELP 命令可以导致多行应答,然而,对所有命令,多行响应都是允许的。REPLY CODES BY FUNCTION GROUPS 500 格式错误,命令不可识别(此错误也包括命令行过长)501 参数格式错误502 命令不可实现503 错误的命令序列504 命令参数不可实现211 系统状态或系统帮助响应214 帮助信息220 服务就绪221 服务关闭传输信道 421 服务未就绪,关闭传输信道(当必须关闭时,此应答可以作为对任何命令的响应)250 要求的邮件操作完成第 13 页 共 36 页251 用户非本地,将转发向450 要求的邮件操作未完成,邮箱不可用(例如,邮箱忙)

34、550 要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问)451 放弃要求的操作;处理过程中出错551 用户非本地,请尝试452 系统存储不足,要求的操作未执行552 过量的存储分配,要求的操作未执行553 邮箱名不可用,要求的操作未执行(例如邮箱格式错误)354 开始邮件输入,以.结束554 操作失败第 14 页 共 36 页4 RFC822说道发送和接受邮件,我们就必须不得不提 RFC822 了。RFC822 的全称是“ARPA 因特网文本信件格式的标准”(Standard for the Format of ARPA Internet Text Messages)。该标准提

35、供了邮件内容的格式和相关语义。41 RFC822 简单介绍RFC822 规定的电子邮件内容全部由 ASCII 字符组成,就是通常所说的文本文件,因而标准将它称为 Internet 文本信件(Internet Text Messages)。从直观上看,信件非常简单,就是一系列由 ASCII 字符组成的文本行,每一行以回车换行符(“ CRLF“,就是 ASCII 码的 13 和 10)结束。从组织上看,信件内容结构分为两大部分,中间用一个空白行(只有 CRLF 符的行)来分隔。第一部分称为信件的头部(the header of the message),包括有关发送方、接收方、发送日期等信息。第二

36、部分称为信件的体部(Body of the message),包括信件内容的正文文本。信头是必需的,信体是可选的,即信体可有可无。如果不存在信体,用作分隔的空白行也就不需要。在信体中,也可以有用作分隔的空白行。这样设计的信件便于进行语法分析,提取信件的基本信息。在 RFC822 中规定,信件体就是一系列的向收信人表达信息的文本行,比较简单,可以包含任意文本,并没有附加的结构。信件头则具有比较复杂的结构,在下一小节中详述。42 信件的头部421 信头的一般格式信头的结构比较复杂,信头由若干信头字段(header field)组成,这些字段为用户和程序提供了关于信件的信息。要了解信头的结构就要弄清

37、楚各种信头字段。所有的信头字段都具有相同的语法结构,从逻辑上说,包括四部分,字段名(field name),紧跟冒号“:“ (colon),后跟字段体(field body),最后以回车换行符(CRLF)终止。即信头字段 = 字段名:字段体 CRLF字段名必须由除了冒号和空格以外的可打印 USASCII 字符(其值在 33 和 126 之间)组成,大多数字段的字段名称由一系列字母,数字组成,中间经常插入横线符。字第 15 页 共 36 页段名告诉电子邮件软件如何翻译该行中剩下的内容。字段体可以包括除了 CR 和 LF 之外的任何 ASCII 字符。但是其中的空格,加括号的注释,引号和多行字段都

38、比较复杂,另外,字段体的语法和语义依赖于字段名,每个类型的字段有特定的格式。RFC822 为信件定义了一些标准字段,并提供了用户自行定义非标准字段的方422 结构化字段和非结构化字段每个字段所包含的信息不同,字段大体可以分为结构化字段和非结构化字段。结构化字段有特定的格式,由语法分析程序检测。Sender 字段就是一个很好的例子,它的字段内容是信箱, 有一个离散的结构。非结构化的字段含有任意的数据,没有固定格式。例如,Subject 字段可以含有任意的文字,并且没有固定格式。非结构化的字段数量较少,只有 Subject、 Comments、扩展字段,非标准字段、INReply 和 Refere

39、nces 等。所有其它字段都是结构化的。423 信头字段的元素尽管 Email 信件的总体结构非常简单,但一些信头字段的结构是很复杂的。下面介绍一些大多数字段共有的元素。(1)空白符像其它文本文件一样,空白符包括空格符(ASCII 码 32)和制表符 Tab(ASCII 码 19)。此外,行末的回车换行符 CRLF 也应算是空白符。使用空白符可以对字段进行格式化,增加它的可读性。例如,每个字段间用 CRLF 来分离,在字段内用空格来分隔字段名和字段内容。在 Subject 后面的冒号和内容之间插入空格字符,会使字段结构更加清晰。在 Email 中,空白符的使用并没有固定的规则,但应当正确地使用,仅在需要时才使用空白符,以便接收软件进行语法分析。(2)注解注解是由括号括起来的一系列字符,例如,(这份礼物)。注解一般用在非结构化的信头字段中,没有语法语义,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报