6.6 电子邮件
# 6.6 电子邮件
电子邮件是因特网上最早流行的一种应用,并且仍然是当今因特网上最重要对使用的应用之一。
- 传统的电话通信属于实时通信,存在以下两个缺点,
第一,电话通信的主叫和被叫双方必须同时在场。
第二,一些不是十分紧迫的电话,也常常不必要的打断人们的工作和休息 - 而电子邮件与邮政系统的寄信相似,
- 发件人将邮件发送到自己使用的邮件服务器,发现人的邮件服务器将收到的邮件按其目的地址转发到收件人邮件服务器中的收件人邮箱
- 收件人在方便的时候访问收件人邮件服务器中自己的邮箱获取收到的电子邮件,
- 电子邮件使用方便,传递迅速,而且费用低廉,它不仅可以传送文字信息,而且还可以附上声音和图像。
- 由于电子邮件的广泛使用,现在许多国家已经正式取消了电报业务。在我国电信局的电报业务也因电子邮件的普及而濒临消失。
电子邮件系统采用客户服务器方式
其三个主要组成构件是用户代理,邮件服务器以及电子邮件所需的协议。。我们来举例说明,假设这是邮件的发送方,这是邮件的接收方。在发送方的计算机中需要使用用户代理来发送邮件,在接收方的计算机中,同样也需要使用用户代理来接收邮件,
用户代理是用户与电子邮件系统的接口,又称为电子邮件客户端软件
这是发送方使用的邮件服务器,例如QQ邮件服务器,这是接收方使用的邮件服务器,例如谷歌邮件服务器,邮件服务器是电子邮件系统的基础设施,因特网上所有的服务提供商ISP都有邮件服务器,其功能是发送和接收邮件,同时还要负责维护用户的邮箱。如图所示,我们可以简单的认为邮件服务器中有很多邮箱,还有用来缓存带转发邮件的缓存
发送方使用用户代理通过邮件发送协议,例如SMTP将邮件发送给发送方邮件服务器,发送方邮件服务器同样通过邮件发送协议,将该邮件发送给接收方邮件服务器
接收方在方便的时候需要用户代理通过邮件读取协议,例如POP3从接收方邮件服务器读取邮件,
也就是说电子邮件所签的协议,包括邮件发送协议和邮件主体协议两类。
接下来我们更进一步说明上述的邮件发送和接收过程。
- 发送方的用户代理,作为SMTP客户与发送方邮件服务器中的SMTP服务器进行TCP连接,然后基于这条连接,是由SMTP协议来发送邮件给发送方邮件服务器,
- 发送方邮件服务器中的SMTP客户与接收方邮件服务器中的SMTP服务器进行TCP连接,然后基于这条连接,使用SMTP协议来发送已收到的待转发邮件给接收方邮件服务器,
- 接收方的用户代理,作为POP3客户与接收方邮件服务器中的POP3服务器进行TCP连接。然后基于这条连接,需要POP3协议,从接收方邮件服务器读取邮件,
- 可以看到这是邮件发送协议的使用范围,包含发送方用户代理到发送方邮件服务器,以及发送方邮件服务器到接收方邮件服务器这两部分,这是邮件读取协议的使用范围,只有接收方用户代理到接收方邮件服务器这一部分。
接下来我们介绍属于邮件发送协议的简单邮件传送协议SMTP的基本工作原理。我们以发送方邮件服务器,使用SMTP协议给接收方邮件服务器发送待转发的邮件为例,发送方邮件服务器周期性的扫描邮件缓存,如果发现有待转发的邮件,则发送方邮件服务器中的SMTP客户会与接收方邮件服务器中的SMTP服务器进行TCP连接,端口号为25(熟知端口号),之后SMTP客户就可以基于这条TCP连接给SMTP服务器,发送SMTP命令,共14条。SMTP服务器也会给SMTP客户发送相应的应答,共21种。
SMTP客户与服务器之间通过命令与应答的交互方式,最终实现SMTP客户发送邮件给SMTP服务器。
接下来我们就要简单介绍一下该过程,当TCP连接建立成功号SMTP服务器会主动推送服务就绪应答给SMTP客户。应答代码220后面可能跟有描述信息,例如这是网易邮件服务器给出的描述信息
SMTP客户收到该应答后,向服务器表明身份,告知自己SMTP服务器的域名,具体命令为HELLO旗号为命令参数
SMTP服务器若认为身份有效,则发回应答代码250,否则发回其他代码。例如421表示服务不可用
SMTP客户收到该应答后,使用命令MAIL FROM来告诉服务器邮件来自何方。
SMTP服务器若认为合理,则发回应答代码250,否则发回其他错误代码
SMTP客户收到该应答后,使用命令RCP TO来告诉服务器邮件去往何方,也就是收件人邮箱
SMTP服务器中,如果有该收件人邮箱,则发回应答代码250,否则发回其他错误代码。
SMTP客户收到该应答后,使用DATA命令来告诉服务器,自己准备发送邮件内容了,
SMTP服务器如果准备好接收发回应答代码354,否则发回其他错误代码。
SMTP客户收到该应答后,就向服务器发送邮件内容,SMTP客户发送完邮件内容后,还要发送结束符 SMTP服务器若收件成功,则发回应答代码250,否则发回其他错误代码。
SMTP客户收到该应答后,使用命令QUIT向服务器请求断开连接,
SMTP服务器发回应答代码221,表示接受请求,并主动断开连接。
需要说明的是为了简单起见,我们省略了可能需要的认证过程,还省略了应答代码后面一般都跟随的简单描述信息,不同的SMTP服务器给出的相同应答代码,其后面跟随的描述信息可能不同。
接下来我们介绍电子邮件的信息格式,电子邮件的信息格式并不是由SMTP协议定义的,而是在RFC 822文档中单独定义。该文档已在2008年更新为RFC 5322,
一个电子邮件有信封和内容两部分,而内容又由首部和主体两部分构成。
例如这是电子邮件的信封,这是电子邮件的内容,它有首部和主体,两部分构成,首部和主体的信息都需要由用户来填写。首部中包含有一些关键字,后面加上冒号,例如关键字FROM后面填入发件人的电子邮件地址,一般由邮件系统自动填入。
关键字TO,后面填入一个或多个收件人的电子邮件,
关键字CC后面填入一个或多个收件人以外的抄送人的电子邮件地址,抄送人收到邮件号,可看可不看邮件,可回可不回邮件,
关键字SUBJECT,后面填入邮件的主题,它反映了邮件的主要内容,很显然最重要的关键字是To
和SUBJECT,他们往往是必填选项,
用户写好首部后,邮件系统将自动的将信封所需的信息提取出来,并写在信封上,所以用户不需要填写电子邮件信封上的信息。
在填写完首部各关键字的内容号,用户还需要撰写邮件的主体部分,这才是用户想传递给收件人的核心信息。
SMTP协议只能传送ASCII文本数据,不能传送可执行文件或其他的二进制对象。
也就是说SMTP不能传送带,有图片、音频或视频数据的多媒体邮件,并且许多其他非英语国家的文字,例如中文、俄文,甚至带有重音符号的法文或德文,也无法用SMTP传送。
为解决SMTP传送非ASCII文本的问题,提出了多用途因特网邮件扩展MIME。如图所示SMTP协议只能传送ASCII文本数据,这是电子邮件的收发双方,假设发送方发送到电子邮件中,包含有非ASCII数据,则不能直接使用SMTP进行传送,需要通过MIME进行转换,将非ASCII数据转换为ASCII数据,然后就可以使用SMTP进行传送了。接收方也要使用MIME对接收到的ASCII数据进行逆转换,这样就可以得到包含有非ASCII数据的电子邮件。
为了实现这种转换,MIME增加了5个新的邮件首部字段,这些字段提供了有关邮件主体的信息,定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化,定义了传送编码可对任何内容格式进行转换,而不会被邮件系统改变。实际上MIME不仅仅用于SMTP,也用于后来的同样面向ASCII字符的超文本传送协议HTTP。到目前为止,我们已经介绍完了涉及邮件发送的相关内容。
接下来我们介绍涉及邮件读取的相关内容,常用的邮件读取协议有以下两个,一个是邮局协议POP。 POP3是其第三个版本,是因特网正式标准,另一个是因特网邮件访问协议IMAP,IAMP4是其第4个版本,目前还只是因特网建议标准。
POP3是非常简单,功能有限的邮件读取协议,用户只能以下载并删除方式或下载并保留方式,从邮件服务器下载邮件到用户计算机,不允许用户在邮件服务器上管理自己的邮件。
IAMP4是功能比POP3强大的邮件读取协议,用户在自己的计算机上就可以操控邮件服务器中的邮箱,就像在本地操控一样,因此IAMP是一个联机协议,
POP3和IAMP4都采用基于TCP连接的客户服务器方式。TOP3是用熟知端口110,IAMP使用熟知端口143,
有关TOP3协议和MAP4协议的具体内容,有兴趣的同学可自行查阅相关资料,我们就要不再深入介绍了。
实际上本节课涵盖了电子邮件系统,涉及到的各方面基本内容,对于了解电子邮件系统的基本工作原理来说已经足够了。
如果同学们将来要进行电子邮件系统相关程序设计,例如编写一个电子邮件客户端软件,则还需要对相关协议的RFC文档进行深入阅读。现在越来越多的用户使用基于万维网的电子邮件,通过浏览器登录邮件服务器万维网网站,就可以撰写、收发、阅读和管理电子邮件,这种工作方式与IAMP很类似,不同的是用户计算机无需安装专门的用户代理程序,也就是电子邮件客户端软件,只需要使用通用的万维网浏览器即可。
邮件服务器网站通常都提供非常强大和方便的邮件管理功能,用户可以在邮件服务器网站上管理和处理自己的邮件,而不需要将邮件下载到本地进行管理。
我们来举例说明,基于万维网的电子邮件应用,假设用户A和B都使用网易邮件服务器,这是用户A的电子邮件地址,这是用户B的电子邮件地址,用户A要给用户B发送邮件,用户A需要浏览器登录邮件服务器网站,撰写并发送邮件给用户B。用户B也使用浏览器登录邮件服务器网站读取收到的邮件。用户A和B在发送和接收邮件时,与服务器之间使用的都是HTTP协议,而不需要使用我们之前介绍过的SMTP和POP3协议。HTTP协议是超文本传送协议,我们将在后续课程中介绍。
再来看另一种情况,假设用户A需要网易邮件服务器,这是他的电子邮件地址,用户C使用谷歌邮件服务器,这是他的电子邮件地址,用户A要给用户C发送邮件,用户A需要浏览器登录自己的邮件服务器网站,撰写并发送邮件给用户C,使用的是HTTP协议。用户A的邮件服务器,需要SMTP将邮件发送给用户C的邮件服务器。用户C也使用浏览器,登录自己的邮件服务器网站,读取收到的邮件,使用的也是HTTP协议。
最后我们来做几个相关的练习题。这是计算机专业考研全国统考计算机网络部分2012年的题40 答案是选项D 我们来一起分析一下。题目所给的4个选项中只出现了两种协议,一种是用于邮件发送的简单邮件传送协议SMTP,另一种是用于邮件读取的邮局协议POP3,阶段1是用户1的用户代理程序,向用户1的邮件服务器发送邮件,应该使用SMTP协议。阶段2是用户1的邮件服务器,给用户2的邮件服务器,发送邮件也应该使用SMTP协议。阶段3是用户2的用户代理程序,从用户2的邮件服务器读取邮件,应该需要POP3协议。
再来看2013年的题40 答案是选项A 如图所示,这是我们之前介绍过的,SMTP协议只支持传送ASCII文本数据,如果电子邮件中包含有非ASCII数据,需要经过MIME转换变成ASCII数据后,才能使用SMTP协议进行传输,因此叙述1正确。再来看我们之前介绍过的这幅图,邮件服务器之间发送邮件,采用的是SMTP协议,因此叙述2正确,用户代理给邮件服务器发送邮件,也需要SMTP协议。因此叙述3也正确,用户代理从邮件服务器读取邮件时,使用的是POP3协议,还可以使用功能更强的IMAP协议。因此叙述4错误。
再来看2018年的题40,答案是选项D,简单题目不再赘述
本节课的内容小结如下