总体描述
互联网的主要组成部分有:用户代理(user agent)、邮件服务器(mail server)和简单邮件传输协议(Simple Mail Transfer Protocol, SMTP)。
一个典型的邮件发送过程是:从发送方的用户代理开始,传输到发送方的邮件服务器,再传输到接收方的邮件服务器,然后在这里被分发到接收方的邮箱中。当Bob要在他的邮箱中读取该
报文时,包含他邮箱的邮件服务器(使用用户名和口令)来鉴别Bob0 Alice的邮箱也必须能处理Bob的邮件服务器的故障。如果Alice的服务器不能将邮件交付给Bob的服务器, Alice的邮件服务器在一个报文队列(message queue)中保持该报文并在以后尝试再次发送。通常每30分钟左右进行一次尝试;如果几天后仍不能成功,服务器就删除该报文并以电子邮件的形式通知发送方(Alice)。
SMTP是因特网电子邮件中主要的应用层协议,它使用TCP可靠数据传输服务,从发送方的邮件服务器向接收方的邮件服务器发送邮件。像大多数应用层协议一样,SMTP也有两个部分:运行在发送方邮件服务器的客户端和运行在接收方邮件服务器的服务器端。每台邮件服务器上既运行SMTP的客户端也运行SMTP的服务器端。当一个邮件服务器向其他邮件服务器发送邮件时,它就表现为SMTP的客户;当邮件服务器从其他邮件服务器上接收邮件时,它就表现为一个SMTP的服务器。
SMTP协议
简介
一发送邮件的例子描述SMTP协议,假设Alice想给Bob发送一封简单的ASCII报文:
- Alice调用她的邮件代理程序并提供Bob的邮件地址(例如someschool. edu),撰写报文,然后指示用户代理发送该报文。
- Alice的用户代理把报文发给她的邮件服务器,在那里该报文被放在报文队列中。
- 运行在Alice的邮件服务器上的SMTP客户端发现了报文队列中的这个报文,它就创建一个到运行在Bob的邮件服务器上的SMTP服务器的TCP连接。
- 在经过一些初始SMTP握手后,SMTP客户通过该TCP连接发送Alice的报文。
- 在Bob的邮件服务器上,SMTP的服务器端接收该报文。Bob的邮件服务器然后将该报文放入Bob的邮箱中。
- 在Bob方便的时候,他调用用户代理阅读该报文。


注意:
- SMTP 一般不使用中间邮件服务器发送邮件,即使这两个邮件服务器位于地球的两端也是这样
- SMTP 限制所有邮件报文的体部分(不只是其首部)只能采用简单的7比特的ASCII表示
与HTTP协议对比
SMTP和HTTP一样都是使用TCP运输服务,这两个协议都用于从一台主机向另一台主机传送文件:HTTP从Web服务器向Web客户(通常是一个浏览器)传送文件(也称为对象);SMTP从一个邮件服务器向另一个邮件服务器传送文件(即电子邮件报文)。但是二者之间也有区别,主要的区别在以下三点:
- HTTP主要是一个拉协议(pull protocol),即在方便的时候,某人在Web服务器上装载信息,用户使用HTTP从该服务器拉取这些信息,即TCP连接是由想接收文件的主机发起的;而SMTP基本上是一个推协议(push protocol),即发送邮件服务器把文件推向接收邮件服务器,即这个TCP连接是由要发送该文件的主机发起的。
- SMTP要求每个报文(包括它们的体)采用7比特ASCII码格式。如果某报文包含了非7比特ASCII字符(如具有重音的法文字符)或二进制数据(如图形文件),则该报文必须按照7比特ASCII码进行编码。HTTP数据则不受这种限制。
- 对于个既包含文本又包含图形的文档,HTTP把每个对象封装到它自己的HTTP响应报文中, 而SMTP则把所有报文对象放在一个报文之中。
邮箱访问协议

从上图可以看到,从发送发用户代理一直到接收方的邮件服务器,都是使用的SMTP协议,但是从接收方的邮件服务器到接收方的用户代理使用的却并不是SMTP协议,即用户代理取报文并不是使用的SMTP协议,其原因是SMTP是一个推协议,而取报文是一个拉操作。通过引入一个特殊的邮件访问协议来解决这个难题,该协议将Bob邮件服务器上的报文传送给他的本地PC。目前有一些流行的邮件访问协议,包括:第三版的邮局协议(Post Office Protocol—Version 3 , POP3)、因特网邮件访问协议(Internet Mail Access Protocol,,IMAP)以及 HTTP。POP3
POP3是一个极为简单的邮件访问协议,由RFC 1939进行定义,简短且可读性强。因为该协议非常简单,故其功能相当有限。当用户代理(客户)打开了一个到邮件服务器(服务器)端口 110上的TCP连接后,POP3就开始工作了。随着建立TCP连接,POP3按照三个阶段进行工作:特许(authorization)、事务处理以及更新。
- 在第一个阶段即特许阶段,用户代理发送(以明文形式)用户名和口令以鉴别用户。
- 在第二个阶段 即事务处理阶段,用户代理取回报文;同时在这个阶段用户代理还能进行如下操作,对报文做删除标记,取消报文删除标记,以及获取邮件的统计信息。
- 在第三个阶段即更新阶段,它出现在客户发出了 quit 命令之后,目的是结束该POP3会话;这时,该邮件服务器删除那些被标记为删除的报文。
IMAP
和POP3 —样,IMAP是一个邮件访问协议,但是它比POP3具有更多的特色,不过也比POP3复杂得多。1MAP服务器把每个报文与一个文件夹联系起来;当报文第一次到达服务器时,它
与收件人的INBOX文件夹相关联。收件人则能够把邮件移到一个新的、用户创建的文件夹中,阅读邮件,删除邮件等。IMAP协议为用户提供了创建文件夹以及将邮件从一个文件夹移动到另一个文件夹的命令。IMAP还为用户提供了在远程文件夹中查询邮件的命令,按指定条件去查询匹配的邮件。值得注意的是,与POP3不同,IMAP服务器维护了 IMAP会话的用户状态信息,例如,文件夹的名字以及哪些报文与哪些文件夹相关联。IMAP的另一个重要特性是它具有允许用户代理获取报文某些部分的命令。例如,一个用户代理可以只读取一个报文的报文首部,或只是一个多部分MIME报文的一部分。用户代理和其邮件服务器之间使用低带宽连接(如一个低速调制解调器链路)的时候,这个特性非常有用。使用这种低带宽连接时,用户可能并不想取回他邮箱中的所有邮件,其要避免可能包含如音频或视频片断的大邮件。
基于Web的电子邮箱
今天越来越多的用户使用他们的Web浏览器收发电子邮件,使用这种服务,用户代理就是普通的浏览器,用户和他远程邮箱之间的通信则通过HTTP进行。当一个收件人(如Bob),想从他的邮箱中访问一个报文时,该电子邮件报文从Bob的邮件服务器发送到他的浏览器,使用的是HTTP而不是POP3或者IMAP协议。当发件人(如Alice)要发送一封电子邮件报文时,该电子邮件报文从Alice的浏览器发送到她的邮件服务器,使用的是HTTP而不是SMTP。然而,Alice的邮件服务器在与其他的邮件服务器之间发送和接收邮件时,仍然使用的是SMTP。
