第26章——电子邮件(SMTP,POP,IMAP和MIME)
1. 电子邮件与其他大多数网络应用有本质上的区别,因为邮件系统必须考虑远端目的地暂时无法接通的情况。为了处理延迟交付问题,邮件系统使用一种称为假脱机 / 信息暂存(spooling)的技术。当用户发送一个邮件报文时,系统将邮件的副本以及邮件的发送方、接收方、目的机器和存储时间一起保存在专用存储区(称为缓冲区)中。然后,系统以后台方式启动与远程机器之间的传送,以允许发送方继续进行其他计算活动。
后台邮件传送进程成为一个客户,并使用域名系统将目的机器名映射为 IP 地址,然后试图建立到达目的机器上邮件服务器的 TCP 连接。如果成功,传送进程将一份报文副本传递给远程服务器,该服务器将此副本存放在远程系统的缓冲区内。一旦客户和服务器都认为已经收到并存储了该副本,客户即可删除本地副本。
如果客户不能建立 TCP 连接或连接失败,传送进程将记录尝试交付的时间和交付终止的时间。后台传送进程定期扫描整个缓冲区,检查是否有未交付的邮件,一般来说这个周期为每隔 30 分钟一次。一旦它找到一个未交付的邮件,或者一旦用户放入一个新的待发邮件,后台进程将再次尝试交付。如果过了几小时后,邮件客户进程发现邮件报文还是不能交付出去,它就会通知发送方,而如果是过了某个期限(如 3 天)之后,邮件软件会将此邮件返回给发送方。
2. 邮箱名字和别名
第一,用户通过给出一个字符串来指明每个收件方,这个字符串包含了由 @ 分隔的两项内容:
local-part@domain-name
其中,domain-name是邮件将被交付到达的邮件目的地的域名(邮件交换机),local-part是该机器上的邮箱地址。
第二,此规范中使用的名字与分配给机器的其他名字完全无关。因为域名系统中包含了一个单独的用于邮件目的地的查询类型,因此可以让邮件目的地域名与分配给机器的正常域名脱离关系。
3. 别名扩展与邮件转发
大多数电子邮件服务器提供邮件转发(mail forwarding)软件,其中包括了邮件别名扩展(mail alias expansion)机制。
邮件转发器允许将传入报文的副本再发送到一个或多个目的地。通常,服务器会查询一个小型的邮件别名数据库,把传入的收件方地址映射为一组地址 A,然后再向 A 中的每个地址转发一份副本。
因为别名映射可以是“多对一”或“一对多”的,所以它增加了邮件系统的功能,并为用户带来了方便。
下图所示为支持邮件别名和邮件列表扩展的邮件系统的构成方式。如图所示,传入的和外发的邮件都要经过邮件转发器,并由邮件转发器扩展别名。
4. 电子邮件服务的TCP/IP标准
为了拓展电子邮件的互操作性,TCP/IP将邮件标准一分为二。其中一个标准(在 RFC2822中给出)用于
指明邮件报文使用的语法格式。另一个标准则指明两台计算机之间电子邮件交换的细节。
根据 RFC2822,邮件报文以文本方式表示,并且分为两部分:首部和主体,中间用一个空行隔开。邮件报文标准指明了邮件首部的确切格式以及每个首部字段的语义解释,但它将主体格式留给发送方决定。
实际上,标准指明邮件首部中包含的是分成若干行的可读文本,每行由一个关键字后跟冒号和一个值组成。有一些关键字必须存在的,有一些是可选的,其余则不加解释。
例如:
1)首部必须包含一行指明了目的地的文本。该行以 To:开头,后半行的内容则是收件方的电子邮件地址。
2)以From:开头的行中含有发送方的电子邮件地址。
可选的关键字包括:
3)发送方可以指定回执应送到哪个地址 (即允许发送方指定将回执送到某个地址而不是发送方的邮箱) ,如果有,则用以Reply-to:开头的行指明回执发往的地址。如果没有此行,接收方将使用 From:行中的信息作为回执地址。
5. 简单邮件传送协议(SMTP)
简单邮件传送协议(Simple Mail Transfer Protocol,简称 SMTP)定义了机器和机器之间交换邮件的标准。SMTP 重点关注底层邮件交付系统如何通过一个互联网,将邮件从一台机器传到另一台机器,并没有指明邮件系统如何从用户那里接受邮件,或用户接口如何将收到的邮件交给用户。
SMTP非常直观。客户和服务器之间的通信由可读的ASCII文本组成。与使用其他应用协议一样,程序读取命令缩写以及行首的3位数字,其余文字用来帮助人们手工调试邮件软件。每个命令单独占据一行。
1)最初由客户建立一条到达服务器的可靠数据流连接,并等待服务器发送一个220 READY FOR MAIL报文 (如果服务器超载, 可能暂时推迟220 报文的发送)。
2)收到 220 报文后,客户发送一个 HELO命令(如果客户支持 FRC2821中的扩展,客户就发送一个EHLO命令)。一行的结束标志着一个命令的结束。
3)一旦建立通信,发送方就可以传送一个或多个邮件报文,然后终止连接。接收方必须确认命令,也可以异常终止整个连接或当前报文的传送。
邮件事务是从 MAIL 命令开始的,给出了发送方的标识符和一个 FROM:字段,该字段包含接受差错报告的地址。
收件方准备好用于接收新邮件的数据结构,并通过发送响应250 来回答 MAIL命令。响应 250 的含义是一切都好。完整的响应由文本“250 OK”组成。
成功执行 MAIL 命令后,发送方发出一系列 RCPT 命令,这些命令标识了邮件的收件方。接收方必须通过发送250 OK 或发送差错报文 550 No such user here来确认每个 RCPT 命令。
在收到所有 RCPT 命令的确认后,发送方发出一个 DATA 命令。DATA命令本质上是通知接收方,称发送方已经准备好传送一个完整的邮件。接收方用报文354 Start mail input响应,并指明用于终止邮件报文的字符序列。SMTP用CR-LF来结束一行,并禁止邮件的主体中出现只有一个点的行。
6. 邮件取回和邮箱操纵协议
SMTP传送方案存在一个问题:“非在线的用户怎样接收电子邮件呢?”
这个问题的答案在于一个两阶段的交付过程:
1)在第一个阶段,一台具有永久因特网连接的计算机为每个用户分配了一个邮箱。这台计算机运行着一个常规的 SMTP 服务器,它总是准备好接收电子邮件。
2)第二个阶段,用户连接到因特网上,然后运行一个从永久性邮箱中取回邮件的协议。这个协议把邮件报文传送到用户使用的计算机上,然后用户可以在这台计算机上阅读邮件。
有两个协议允许远程用户从永久邮箱中取回邮件。虽然这两个协议的功能类似,但却采取了两种截然相反的方法:一个允许用户下载报文的副本,而另一个则允许用户查阅和操纵服务器上的报文:
1)把邮件从永久邮箱传送到本地计算机上的最流行的协议称为邮局协议(Post Office Protocol)
版本3,简称POP3,这个协议的安全版本称为 POP3S。用户调用POP3客户,该客户创建一个 TCP连接,连到邮箱所在计算机的POP3服务器上。用户首先要发送登录名和口令,以鉴别会话。一旦鉴别被接受,客户发送命令,取回一个或多个邮件的副本,然后从永久邮箱中删除邮件。邮件按2822标准格式的文本文件进行存储和传送。
注意,具有永久邮箱的计算机必须运行两个服务器程序,SMTP服务器程序接受发送给用户的邮件,并把传入的每个邮件添加到该用户的永久邮箱中,而POP3服务器程序允许用户从邮箱中提取邮件并将其删除。
2)网际报文访问协议(Internet Message Access Protocol)版本 4,简称IMAP4,是POP3的一种替代协议,允许用户查阅和操纵报文。IMAP也已定义了一个安全版本,称为 IMAPS。与 POP3类似,IMAP4 定义了称为邮箱(mailbox)的抽象,邮箱和服务器位于同一计算机上。
用户运行一个IMAP 客户与服务器进行联络,以操纵报文,这也和POP3类似。但是,与 POP3不同的是,IMAP4允许用户从多个地点(如从工作地点和从家里)访问邮件报文,并保证所有副本都是同步并且一致的。
IMAP4 还提供了邮件取回和处理的扩展功能。用户可以获得有关报文的信息或检查首部字段,而不需要取回整个报文。另外,用户可以搜索一个指定的字符串,并取回报文中的某些部分。部分取回对于慢速拨号连接尤其重要,因为这意味着用户不需要下载无用的信息。
7. MIME扩充
多用途网际邮件扩充(Multipurpose Internet Mail Extension,简称MIME)是为了通过电子邮件发送非ASCII数据而定义的。MIME 并没有改动或取代 SMTP、POP3和 IMAP4 这些协议。相反,它允许用ASCII码将任意数据编码,然后在标准电子邮件报文中传送。为了适应任意数据类型和表示法,每个MIME 邮件中包含了一些信息, 用来告知收件方它所使用的数据类型和编码格式。 MIME的信息位于2822 邮件首部中,MIME首部中的一些行指明了 MIME 的版本、发送数据的类型以及将数据转换为ASCII码所用的编码格式。
阅读(7645) | 评论(0) | 转发(0) |