浅探电子邮件原理

电子邮件在生活中无处不在,极大促进了我们的沟通效率。这里,简单探讨下电子邮件的相关工作方式和原理。

电子邮件系统

图中可以看到,每个用户通过自己的**用户代理(user agent)邮件服务器(mail server)通讯,邮件服务器之间通过 SMTP 协议来进行通讯。邮件服务器形成了电子邮件体系结构的核心。每个用户在邮件服务器上有一个邮箱(mailbox)**,就是邮箱在打理着每个用户的邮件数据,接收或是删除。假设 A 向 B 发送一封邮件,典型的过程是这样的:

1
A ---(SMTP)---> Mail Server(A) ---(SMTP)---> Mail Server(B) ---?---> B

前面说到,邮件服务器形成了电子邮件体系结构的核心,而 SMTP 则可称为电子邮件应用的核心。SMTP 的诞生早于 HTTP,说明了它具有某些过时的特性,比如:它限制所有邮件报文的体部分只能采用简单的 7 比特 ASCII 码来传输。对于今天的各种附件、图片、媒体资源来说,必须先经过转码才能通过 SMTP 协议发送出去,显然这降低了邮件传输的效率。然而,SMTP 能够延续到今天仍在使用,说明它有着自己足够吸引人的特性。

SMTP 一般情况下不通过中间邮件服务器来发送邮件,所以,如果 A 给 B 发送邮件时,B 的邮件服务器故障或者未开机,那么该邮件会留存在 A 的邮件服务器上等待并尝试重新发送,而不会遗落在其它邮件服务器上。

Alice 向 Bob 发送一条报文

以 Alice 和 Bob 为例发送一个邮件报文:

  1. Alice 提供 Bob 的邮件地址,撰写报文,指示用户代理发送报文。
  2. 通过用户代理投送到 Alice 的邮件服务器,放入**报文队列(message queue)**中。
  3. Alice 的邮件服务器将邮件报文发送至 Bob 的邮件服务器,在这个过程中,Alice 的邮件服务器充当客户,Bob 的邮件服务器充当服务器。SMTP 客户端将与 SMTP 服务器建立 TCP 连接。
  4. 一旦连接建立,将进行一系列的 SMTP 握手过程,随后将邮件报文发送至服务器。如果连接无法建立,将邮件报文放入**报文队列(message queue)**中,等待再次尝试发送。
  5. 在 Bob 的邮件服务器上,SMTP 的服务器端接收到该报文。Bob 的邮件服务器然后将报文放入 Bob 的邮箱中。
  6. Bob 有空闲时可以通过用户代理阅读报文。

注意到 SMTP 协议与 HTTP 有很大的不同,SMTP 基本可看作是一个**推协议(push protocol)**,这个 TCP 连接需要由发送文件的机器发起。对应上述示例中 Alice 向 Alice 的邮件服务器发送报文过程和 Alice 的邮件服务器向 Bob 的邮件服务器发送过程。当目标服务器不可达时,Alice 的用户代理没有办法将电子邮件报文发送到目标服务器,需要 Alice 进行重试,而通过两次 SMTP 的过程分离了 Alice 的在线约束条件,一切交给邮件服务器去重试。这就导致一个问题,Bob 并不总是在线,Bob 的邮件服务器不可能保证 Bob 的用户代理一直可用,所以 Bob 邮箱中的报文需要 Bob 在线的时候主动去获取。现在的电子邮件系统以是存储与转发的模型为基础。邮件服务器接受、转发、提交及存储邮件。寄信人、收信人及他们的电脑都不用同时在线。寄信人和收信人只需在寄信或收信时简短的连接到邮件服务器即可。实现这样的体系仅仅有 SMTP 是不够的,因而需要其它协议来配合。

报文发送中的协议

为了使 Bob 能够从自己的邮件服务器中拉取邮件,需要引入一个特殊的邮件访问协议。流行的邮件访问协议有 **邮局协议第三版(Post Office Protocol-Version 3, POP3)因特网邮件访问协议(Internet Mail Access Protocol, IMAP)**。

POP3 由 RFC 1939 定义。其过程为用户代理建立到邮件服务器 110 端口的 TCP 连接,POP3 按照三个阶段进行工作:特许、事务处理及更新。特许阶段用户代理以明文发送用户名和口令鉴别用户。第二个阶段可以做三件事情:取回邮件报文,标记要删除的邮件或取消标记,获取邮件统计信息。在最后的更新阶段,结束 POP3 会话并处理删除标记。

IMAP 服务相比 POP3 的优点是,它将每个报文与一个文件夹相联系。当报文第一次到达服务器,它与收件人的 INBOX 文件夹相关联。收件人可以移动到新的文件夹、阅读或是删除邮件。IMAP 也提供了远程查询的命令,可以条件匹配查询邮件信息。与 POP3 不同的是,IMAP 维护会话过程的用户状态信息,比如每个报文的文件夹关联。另一个重要特性是允许只获取报文的一部分,比如常用的移动设备都有在 wifi 下下载附件的功能,在普通网络下则只会加载邮件标题和摘要,点击全文下载完整邮件。

Gmail 中的 POP3 和 IMAP 协议设置

另外,在上面的示例图中,Bob 获取报文还有一种方式是通过 HTTP,电子邮件怎么又和 Web 扯上关系了呢?

在早期,电子邮件的用户代理都是客户端软件,20 世纪 90 年代中期,hotmail 推出基于 Web 的邮件服务,大大方便了邮件使用。谷歌的 Gmail 则是一个 Web 软件的精彩范例。当使用基于 Web 的电子邮件服务时,发件人和收件人的用户代理(Web 邮件服务)与邮件服务器之间通过 HTTP 协议发送和接收邮件报文。但在邮件服务器之间,仍使用 SMTP 协议来发送报文。

END

参考:

  1. 《Computer Networking: A Top-Down Approach (6th Edition)》
  2. Email
  3. Simple Mail Transfer Protocol
  4. Post Office Protocol
本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处! © 雨落
沉淀,分享。