文前说明
作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。
本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。
1. 概要
- 电子邮件是一种异步通信媒介,因特网电子邮件系统的主要组成部分是 用户代理(user agent)、邮件服务器(mail server)和 简单邮件传输协议(simple Mail Transfer Protocol,SMTP)。
- 邮件服务器形成了电子邮件系统体系结构的核心。每个接收方在其中的某个邮件服务器上都有一个 邮箱(mailbox)。
- 邮箱管理和维护着发送给他的报文。
- 一个典型的邮件发送过程是:从发送方的用户代理开始,传输到发送方的邮件服务器,再传输到接收方的邮件服务器,然后在这里被分发到接收方的邮箱中。
- 如果发送方的邮件服务器不能将邮件交付给接收方的邮件服务器,那么发送方的邮件服务器会在一个 报文列表(message queue)中保持该报文并在以后尝试再次发送(通常每 30 分钟进行一次尝试,几天后仍不能发送成功,服务器则删除该报文并以电子邮件的形式通知发送方)。
- SMTP 是因特网电子邮件中主要的应用层协议。它使用 TCP 可靠数据传输服务,从发送方的邮件服务器向接收方的邮件服务器发送邮件。
2. 原理
邮件传输协议2.1 SMTP
-
[ RFC 5321 ] 给出了 SMTP 的定义。SMTP 用于从发送方的邮件服务器发送报文到接收方的邮件服务器。
- 因为 SMTP 问世的时间比 HTTP 还要长得多,所以它具有某些陈旧的特征。
- 例如它限制所有邮件报文的体部分(不只是首部)只能采用简单的 7 比特 ASCII 表示(即在使用 SMTP 传送邮件之前,需要将二进制多媒体数据编码为 ASCII 码,并在使用 SMTP 传输后再将相应的 ASCII 码邮件解码还原为多媒体数据)
- SMTP 一般不使用中间邮件服务器发送邮件,即使两个邮件服务器位于地球的两端。
- 默认端口号为 25。
- 因为 SMTP 问世的时间比 HTTP 还要长得多,所以它具有某些陈旧的特征。
与 HTTP 的对比
- HTTP 从 Web 服务器向 Web 客户端传送文件(对象),SMTP 从邮件服务器向另一个邮件服务器传送文件(电子邮件报文) 。
- 当进行文件传送时,持续的 HTTP 和 SMTP 都是用持续连接。
- HTTP 是一个 垃协议(pull protocol),TCP 连接是由想接收文件的机器发起。SMTP 是一个 推协议(push protocol),即发送邮件服务器把文件推向接收邮件服务器,TCP 连接诶是由想要发送文件的机器发起。
- SMTP 要求报文采用 7 比特 ASCII 码格式,HTTP 没有这个限制。
- HTTP 把每个对象封装到它自己的响应报文中,而 SMTP 则把所有报文对象放在一个报文中。
2.1.1 邮件报文格式
- SMTP 报文每个首部行包含了可读的文本,由关键字后跟冒号及其值组成。某些关键词必须,某些可选。
- 每个首部必须含有一个 From 首部行 和一个 To 首部行。一个首部也许包含一个 Subject 首部行以及其他可选的首部行。
- 在报文首部之后,紧接着一个空白行(即回车换行),然后是以 ASCII 格式表示的报文体。
- 一旦 SMTP 将邮件报文从发送方的邮件服务器交付给接收方邮件服务器,该报文就放在了接收方的邮箱中。
2.2 邮件访问协议
- 在 PC 上运行一个用户代理程序,从邮件服务器垃取邮件。这样的邮件访问协议有 第三版的邮局协议(Post Office Protocol-Version 3,POP3)、因特网邮件访问协议(Internet Mail Access Protocol,IMAP)以及 HTTP。
- 邮件访问协议用来将邮件从接收方的邮件服务器传送到接收方的用户代理。
2.2.1 POP3
- POP3 是一个极为简单的邮件访问协议,由 [ RFC 1939 ] 进行定义。
- 默认端口为 110。
- 建立 TCP 连接后,POP3 按照三个阶段进行工作。
- 特许(authorization),用户代理发送(以明文形式)用户名和口令以鉴别用户。
- 事务处理,用例代理取回报文,同时还能对报文做删除标记,取消报文删除标记以及获取邮件的统计信息。
- 更新,结束该 POP3 会话,邮件服务器删除那些被标记为删除的报文。
- 在 POP3 的事务处理过程中,用户代理发出一些命令,服务器对每个命令做出回答。
- OK(有时后面还跟有服务器到客户的数据),被服务器用来指示前面的命令正确。
- ERR,被服务器用来指示前面的命令出现了差错。
- 特许阶段的两个主要命令为 user <user name> 和 pass <password>。
- 特许阶段以后,用户代理仅使用了四个命令,包含有 list(列出所有存储的报文的长度)、retr(取回邮件)、dele(删除邮件) 和 quit(退出)。
2.2.2 IMAP
- 使用 POP3 访问,一旦将邮件下载到本地主机,能建立邮件文件夹,并将下载的邮件放入该文件夹中,然后用户可以删除报文,在文件夹之间移动报文,并查询报文。
- POP3 协议没有给用户提供任何创建远程文件夹并为报文指派文件夹的方法。
- 为了解决这个或其他一些问题,由 [ RFC 3501 ] 定义了 因特网邮件访问协议(Internet Mail Access Protocol,IMAP)。
- IMAP 服务器把每个报文与一个文件夹联系起来,当报文第一次到达服务器时,它与收件人的 INBOX 文件夹相关联。收件人则能够把邮件移动到一个新的,用户创建的文件夹中,阅读邮件、删除邮件等。
- IMAP 协议为用户提供了创建文件夹以及将邮件从一个文件夹移动到另一个文件夹的命令。
- IMAP 协议还为用户提供了在远程文件夹中查询邮件的命令、按指定条件去查询匹配的邮件。
- 与 POP3 不同,IMAP 服务器维护了 IMAP 会话的用户状态信息,例如,文件夹的名字以及那些报文与哪些文件夹相关联。
- IMAP 的另外一个重要特性是它具有允许用户代理获取报文某些部分的命令,例如,一个用户代理可以只读取一个报文的报文首部,或只是一个多部分 MIME 报文的一部分。当用户代理和其他邮件服务器之间使用低带宽连接的时候,这个特性非常有用(用户可能并不想取回他邮箱中的所有邮件,尤其要避免可能包含如音频或视频片段的大邮件)。
2.2.3 基于 Web 的电子邮件
- 使用这种服务,用户代理就是普通的浏览器,用户和远程邮件之间的通信则通过 HTTP 进行。接收邮件和发送邮件都可以使用 HTTP 协议。
网友评论