电子邮件是一种异步通信方式,通信时不需要双方在场。电子邮件把邮件发送到收件人使用的服务器,并放入收件人的收件箱种,收件人可以随时上网到自己使用的邮件服务器进行阅读。

电子邮件系统的组成结构

电子邮件系统由三大类构成:用户代理、邮件服务器以及电子邮件系统所使用的协议

电子邮件的组成结构如图所示:

 电子邮件(SMTP、MIME、POP3、IMAP)-编程之家

 用户代理:用户与电子邮件系统的接口。用户代理具有撰写,显示和邮件处理的功能。通常情况下,用户代理就是一个运行再在PC上的程序

邮件服务器:功能是发送和接收邮件,同时还要向发信人报告邮件传送的情况(已交付,被拒绝,丢失)。邮件服务器采用客户/服务器方式工作,但他必须能够同时充当客户和服务器。

邮件发送协议和读取协议邮件发送协议用于用户代理向邮件服务器发送邮件或在邮件服务器之间发送邮件(如SMTP);邮件读取协议用于用户代理从邮件服务器读取邮件(如POP3)。SMTP用的时Push的通信方式,也就是发送方把邮件"推"给接收方。POP3用的时Pull的通信方式,也就是接收方把邮件从发送方处拉到接收方那里。

电子邮件系统的收发过程

 电子邮件(SMTP、MIME、POP3、IMAP)-编程之家

收发过程如下:

  1. 发信人调用用户代理来撰写和编辑想要发送的邮件。写完后由用户代理用SMTP发送给邮件发送端邮件服务器的缓存内。

  2. 运行在发送端邮件服务器的SMTP客户进程只要发现缓存中还有邮件,就向运行在接收端邮件服务器的SMTP服务进程发起建立TCP连接

  3. TCP连接建立完成后,SMTP客户进程开始向接收端邮件服务器发送邮件。当所有邮件发完后,SMTP就断开TCP连接。同时接收端邮件服务器把邮件放入收件箱

  4. 收信人调用用户代理,使用POP3或IMAP协议将自己的邮件从接收端邮件服务器的用户邮箱中取回。

电子邮件格式

电子邮件分为信封和内容两大部分,邮件内容又分为首部和主题两个部分。RFC822规定了邮件的首部格式,而邮件的主体部分则让用户自由撰写。用户写好首部后,邮件系统自动地将信封所需的信息提取出来并写在信封上,用户不需要亲自填写信封上的信息。

邮件首部包含一些首部行,每个首部行由一个关键字后跟冒号再后跟值组成。有些关键字是必须的,有些是可选的。最重要的关键字是To和Subject。

To是必须关键字,后面填入一个或多个收件人的电子邮件地址。电子邮件地址的规定格式为:收件人邮箱名@邮箱所在主机域名,如 chujiagn@qq.com ,其中收件人邮箱名字就是用户名,liuzekai在qq.com这个邮件服务器上必须是唯一的。也就是说 chujiang@qq.com 在整个网络上都是唯一的

From是必须关键字,后面填入发送方的电子邮件地址,不过这一项通常由邮件系统自动填入

SMTP和MIME

SMTP(端口号:25)

可靠且有效的电子邮件传输协议,控制两个相互通信的SMTP进程交换信息。使用TCP连接,端口号为25。SMTP通信有以下三个阶段:

(1)连接建立

发件人的邮件发送到发送方邮件服务器缓存中后,SMTP服务器每隔一定时间就对邮件缓存扫描一次。如果发现有邮件,就使用SMTP的熟知端口号25与接收方服务器的SMTP服务器建立TCP连接。连接建立后,接收方服务器发出220 Service ready。然后SMTP客户向SMTP服务器发送HELO命令,附上对方的主机名。

SMTP不使用中间的邮件服务器,不论中间经过了多少个路由器。当接收方邮件服务器因故障不能暂时建立连接的时候,发送方的邮件服务器只能等待一段时间后再次尝试连接

(2)邮件传递可行性确认

连接建立后,就可以开始传送邮件。邮件的传送从MAIL命令开始,MAIL命令后面有发件人的地址。如 MAIL FROM: < chujiang@qq.com >。若SMTP服务器已经准备好接受邮件,则回答250 OK.接着SMTP客户端发送一个或多个RCTP命令(收件人命令),格式为RCPT TO: <收件人地址>。没法送一个RCPT命令,都应该有相应的信息从SMTP服务器返回,如250OK或者是550 no such user here(没找到此类用户)

RCPT用来弄清楚接收方系统是否已经做好接收邮件的准备。防止发送了很长的邮件后才知道地址错误,就浪费了通信资源。

(3)邮件传递

获得OK的回答后,客户端就使用DATA命令,表示要开始传输邮件的内容。正常情况下,SMTP服务器回复的信息是354 Start mail input; end with <CRLF>.<CRLF>。<CRLF>表示的是回车换行。此时SMTP就可以开始传送邮件内容了,并用<CRLF>.<CRLF>表示邮件内容的结束。

目前很多邮箱没有用SMTP了,而是用HTTP,只有在不同邮件服务器之间传送邮件的时候采用SMTP。

MIME

由于SMTP只能传送一定长度的ASCII码邮件,许多其他非英语国家的文字(中文,俄文,日文)就无法传送,而且SMTP无法传送可执行文件以及其他二进制对象。因此提出了多用途网络邮件扩充。也就是MIME

MIME并未改动SMTP或是取代它,而是相当于游戏内的一个DLC,也就是继续使用目前的格式,但是增加了邮件主题的结构,并定义了传送非ASCII码的编码规则,也就是说,MIME邮件可在现有的电子邮件程序和协议下传送,但是MIME邮件可传送的东西比SMTP要多。

MIME 主要包括以下3个部分:

  1. 5个新的邮件首部字段:MIME版本,内容描述,内容标识,传送编码,内容类型。

  2. 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化

  3. 定义了传送编码,可对任何内容格式进行转换,而不会被邮件系统给改变

说白了,用了MIME,就可以传送SMTP本来传送不了的很多东西

POP3和IMAP

POP3(端口号:10)

简单但功能有限的邮件读取协议。采用的是拉取(Pull)的通信方式,当用户读取邮件的时候,用户代理向邮件服务器发出请求,"拉"取用户邮箱中的邮件。

POP也使用客户/服务器的工作方式,使用TCP,端口号为10。接收方的用户代理上必须运行POP客户程序,而接收方的邮件服务器上运行POP服务器程序。POP有两种工作方式:

  1. 下载并保留:用户从邮件服务器上读取邮件后,该邮件仍会保留在服务器内

  2. 下载并删除:用户从邮件服务器上读取邮件后,该邮件会被删除,用户不能再次读取

IMAP

比POP3要复杂,为用户提供了创建文件夹,在不同文件夹之间移动邮件及在远程文件夹中查询邮件等联机命令,为此IMAP维护了会话用户的状态信息。(说白了就是IMAP让你的邮件服务器变成了你的远程硬盘,里面的邮件,可以理解为文件,随便你挪来挪去,也允许你创建删除文件夹)IMAP的另一特性就是允许用户代理只获取报文的部分信息,例如可以只读取一个报文的首部,或多部份MIME报文的一部分。适用于低带宽的情况(也就是别人发来的邮件可能带视频和视频描述,你可以只看视频描述而不看视频)