第二章第四节 因特网中的电子邮件
Outline
Notes
## 因特网的三大组件
下图是因特网电子邮件系统的整体状况,从该图中咱们能够看出它有3个重要组成部分:用户代理(user agent)、邮件服务器(mail server)和简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)。web

用户代理容许用户阅读、回复、转发、保存和撰写报文。浏览器
邮件服务器组成了电子邮件体系结构的核心。每一个接收方在其中的某个服务器上有一个邮箱。邮箱包含用户的到达报文、离开(将发送)邮件报文的报文队列;在发送电子邮件报文的邮件服务器之间采用SMTP协议。安全
SMTP是因特网电子邮件中主要的应用层协议。它使用TCP可靠数据传输服务,从发送方的邮件服务器向接收方的邮件服务器发送邮件。服务器
## SMTP
- SMTP是电子邮件应用的核心,使用TCP从客户机到服务器可靠地传输电子邮件报文,用端口25,属于TCP/IP协议族。
- SMTP通常不使用中间邮件服务器发送邮件,他采用直接传输的方式,从发送服务器到接受服务器
- 传输共有三个阶段:握手、报文传输、关闭
-
在SMTP握手阶段,客户端向SMTP服务器分别指定发信人和收信人的电子邮件地址。握手阶段完毕,SmTP服务器把客户端发出的邮件消息添加到发信队列中,经过TCP提供的可靠数据传输服务把该消息无错的传送到服务器。若是客户还有其余邮件消息须要发送到同一个服务器,就在同一个TCP链接重复上述过程;不然,指定TCP关闭该链接。
-
链接和发送过程以下:
1)创建TCP链接。
2)客户端发送HELO命令以标识发件人本身的身份,客户端发送MAIL命令。服务器以ok做为响应,代表准备接受。
3)使用AUTH命令登陆SMTP服务器。输入用户名和密码(注意用户名和密码都须要使用base64加密)。
4)客户端发送RCPT命令,标识该电子邮件的计划接收人,能够有多个RCPT行。服务器以OK做为响应,表示愿意为收件人发送邮件。
5)协商结束后,使用DATA命令发送。
6)以“.”号表示结束,输入内容一块儿发送出去,结束这次发送,用QUIT命令退出。
- 命令/响应交互模式:
- 命令: 按照ASCII码的表示方式,发送自解释命令
- 响应: 用状态码和短语对每条命令进行回答
- 报文必须是7比特ASCII格式
- SMTP协议经常使用的命令

【SMTP与HTTP的对比】ui
- 相同:HTTP和SMTP都用于从一台主机向另外一台主机传输文件
- HTTP从Web服务器向Web客户;
- SMTP从一个邮件服务器向另外一个邮件服务器;
- 进行文件传输时,两者都使用持续链接
- 差异:
- HTTP主要是一个拉协议:即在方便的时候,某些人在Web服务器上装载信息,用户使用HTTP从该服务器拉取这些信息;SMTP主要是一个推协议:即发送邮件服务器把文件推向接收邮件服务器,这个链接是由要发送该文件的机器发起的。
- SMTP要求每个报文(包括他们的体)使用7比特ASCII码格式,若非如此,则强制转化;HTTP没有这样的编码限制
- HTTP把每一个对象封装到它本身的HTTP响应报文中;SMTP把全部报文对象放在一个报文之中。
## 邮件报文格式和MIME
- RFC 5322规定文本消息格式标准:
- 包括有头部行、空白行、消息体,其中头部行有To、From、Subject,消息体包括消息自己,消息体只能是 ASCII字符
- 因为 文本消息格式标准 ,只适合于发送普通ASCII文本,不能充分知足多媒体报文或非ASCII文本格式的报文的需求。为发送非ASCII码内容,发送方的用户代理必须在报文中使用附加的首部行,MIME(多用途因特网邮件扩展)是对RFC 822的扩展
- 支持多媒体的两个关键MIME首部是Content-Type 和Content-Transfer-Encoding
- Content-Type:首部行容许接收用户代理对报文采起适当的动做
- Content-Transfer-Encoding:首部行提示接收用户代理该报文主体已经使用了ASCII编码,并指出了所用的编码类型。

- 接收服务器一旦接收到具备RFC 822和MIME首部行的报文,就在该报文的顶部添加一个Received:首部行;该首部行定义了发送该报文的SMTP服务器的名称(from),接收该报文的SMTP服务器的名称(by),以及接收服务器接收到的时间。
- 有时一个邮件有多个Receive行,这是由于有的邮件在发送方和接收方之间的路径要通过不止一个SMTP服务器转发。
## 邮件访问协议
在上述分析中,有一个疏漏的环节,那就是在Alice向Bob发送邮件的过程当中,Bob是如何经过运行在他本地PC上的用户代理,得到位于某ISP的邮件服务器上的他的邮件呢?注意到Bob的用户代理不能使用SMTP来取回邮件,由于取邮件时一个拉操做,而SMTP是一个推协议。所以咱们要引入邮件访问协议,包括第三版的邮局协议(POP3)、因特网邮件访问协议(IMAP)以及HTTP。编码
下图总结了应用于因特网电子邮件的一些协议:SMTP用来将邮件从发送发的邮件服务器传输到接收方的邮件服务器。如POP3这样的邮件访问协议用来将邮件从接收方的邮件服务器传送到接收方的用户代理。加密

【POP3】3d
- POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,是TCP/IP协议族中的一员(默认端口是110)。
- 它被用户代理用来邮件服务器取得邮件。POP3采用的也是C/S通讯模型,对应的RFC文档为RFC1939。
- POP3支持电子邮件客户端下载服务器上的邮件,可是在客户端的操做(如移动邮件、标记已读等),不会反馈到服务器上,好比经过客户端收取了邮箱中的3封邮件并移动到其余文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。
- POP3按照三个阶段工做:
- 特许:用户代理发送(以明文形式)用户名和口令以鉴别用户。
- 事务处理:用户代理取回报文,同时对报文作删除标记、取消报文删除标记、以及获取邮件的统计信息
- 更新:他出如今客户发出Quit命令以后,目的是结束POP3会话,这时会删除标记为删除的报文
【IMAP】代理
- IMAP 全称是 Internet Mail Access Protocol,即互联网邮件访问协议,是一个应用层协议(端口是143)。用来从本地邮件客户端(Outlook Express、Foxmail、Mozilla Thunderbird等)访问远程服务器上的邮件。
- 开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操做都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会作相应的动做。因此不管从浏览器登陆邮箱或者客户端软件登陆邮箱,看到的邮件以及状态都是一致的。
- IMAP容许用户代理获取报文组件的命令,例:用户代理能够只读一个保温的报文收不,或只是一个多部分MIME报文的一部分。
【IMAP和POP3的区别】server
IMAP像POP3那样提供了方便的邮件下载服务,让用户能进行离线阅读。IMAP和POP3是邮件访问最为广泛的Internet标准协议。不一样的是:
(1)IMAP提供Webmail与电子邮件客户端之间的双向通讯,客户端收取的邮件仍然保留在服务器上,同时在客户端上的操做都会反馈到服务器上(如:删除邮件,标记已读等,服务器上的邮件也会作相应的动做。因此不管从浏览器登陆邮箱或者客户端软件登陆邮箱,看到的邮件以及状态都是一致的)。而POP3在客户端的操做不会反馈到服务器上。
(2)IMAP更好地支持了从多个不一样设备中随时访问新邮件。
(3)IMAP提供的摘要浏览功能可让你在阅读完全部的邮件到达时间、主题、发件人、大小等信息后才做出是否下载的决定。
(4)POP3须要下载未阅读的邮件,IMAP能够不用把全部的邮件所有下载,而是经过客户端直接对服务器上的邮件进行操做。全部经过IMAP传输的数据都会被加密,从而保证通讯的安全性。
(5)IMAP 总体上为用户带来更为便捷和可靠的体验。POP3 更易丢失邮件或屡次下载相同的邮件。

总之,IMAP 总体上为用户带来更为便捷和可靠的体验。POP3 更易丢失邮件或屡次下载相同的邮件,但 IMAP 经过邮件客户端与webmail 之间的双向同步功能很好地避免了这些问题。
【HTTP】
当用户用Web浏览器手法电子邮件时,用户和他远程邮箱之间的通讯则经过HTTP;然而,Alice的邮件服务器在与其余的邮件服务器之间发送和接收邮件时,仍然使用的是SMTP。