网络协议-应用层协议-电子邮件协议

电子邮件起源

在互联网中,提供电子邮件服务的协议叫 SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),SMTP 为了实现高效发送邮件,在传输层上使用了 TCP 协议。

早期的电子邮件就是通过通信双方建立 TCP 连接实现的,发送端写好邮件后,会保存到硬盘,然后通过建立 TCP 连接将邮件发送到对方的硬盘,发送结束后从发送端硬盘删除该邮件,如果接收方机器没开或者断电,需要过一段时间重发。

显然,这种方式有很大的弊端,需要通信双方都开机的情况下才能发送邮件,像中美两个国家白天和夜晚是颠倒的,则永远无法通信。

为此,在技术上改变了以往直接在发送端和接收端主机之间建立 TCP 连接的机制,而引入了一种会直连电源的邮件服务器,发送端和接收端通过邮件服务器进行邮件的收发。接收端从邮件服务器接收邮件使用 POP3 或 IMAP 协议(关于这两个协议我们放到下一篇详细介绍)。

综上所述,完整的电子邮件机制由三部分组成:邮箱地址、数据格式以及发送协议。下面我们分别来介绍这几个组成部分。

邮箱地址

邮箱地址格式想必大家都很熟悉:

用户名@邮件服务器域名

邮箱地址和域名一样,也是由 DNS 管理,DNS 中注册了邮箱地址及其作为发送地址时对应的邮件服务器的域名,这些映射信息被称作 MX 记录,你可以在域名解析里看到这个选项(以下是阿里云域名解析界面截图):

根据 MX 记录中指定的邮件服务器,可以管理不同邮件地址与特定邮件服务器之间的映射关系。

数据格式

很长一段时间内,互联网中的电子邮件只能处理文本格式的邮件,不过现在电子邮件发送的数据类型已经扩展到 MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展类型),可以发送图片、动画、音频、视频、应用程序等各种形式的数据。

MIME 由首部和正文(数据)两个部分组成,首部中的 Content-Type 用于指定正文的数据类型,常见的数据类型如下表所示:

和 HTTP 协议类似,MIME 首部和正文之间也是通过一个空行分隔,并且如果正文数据比较大的情况下,还可以通过指定数据类型为 multipart/mixed 将多个 MIME 消息组合为一个(HTTP 请求表单里面也有类似逻辑,后面我们介绍 HTTP 协议的时候会提到):

SMTP 协议

SMTP 是发送电子邮件的协议,使用的是 TCP 的 25 号端口。SMTP 建立 TCP 连接之后,就会在这个连接上进行控制和应答以及数据的发送,客户端以文本命令方式发送请求,常见的命令如下表所示(邮件客户端如 Outlook、Foxmail、邮箱大师等底层也是调用这些命令,只不过通过应用交互界面屏蔽了底层实现而已):

然后邮件服务器会对客户端请求进行应答,常见的应答码及对应含义如下:


我们在 TELNET 协议中已经通过命令行演示了通过文本命令发送邮件的操作,这里就不重复演示了,如果是通过邮件客户端软件发送邮件就更简单了,你不需要了解 SMTP 协议底层的工作机制,就可以进行邮件发送:

以上是 Mac 自带的邮件客户端邮件发送操作步骤,非常简单,但为了保证邮件发送成功,还需要配置邮箱认证信息和收发协议,这可以通过添加账户来实现:

不同的邮件客户端软件界面可能不同,但是实现原理上大同小异。对于一些非常见的邮箱,还需要自己配置发送协议和接收协议。

POP 协议

SMTP 的一个不利之处在于它支持的是发送端主机的行为,而不是根据接收端的请求进行发送的行为,因此无法解决用户一开机就能接收到邮件,为了解决这个问题,引入了 POP(Post Office Protocol,即邮局协议)协议,该协议是一种用于接收电子邮件的协议,现在用的是第三版,所以我们经常会看到它的简称 POP3。

发送端的邮件根据 SMTP 协议将被转发给一直处于插电状态的 POP 服务器,客户端再根据 POP 协议从 POP 服务器接收对方放过来的邮件。在这个过程中,为了防止他人盗窃邮件内容,还要做用户验证。

POP 与 SMTP 一样,也是在客户端与服务器之间通过建立一个 TCP 连接完成相应操作,POP 服务端监听端口是 110,常见的 POP 操作命令及服务端响应码如下:


同样,我们可以在 TELNET 中通过上述命令模拟邮件收取操作:

在邮件客户端软件中收取邮件就更简单了,只要你配置了正确的 POP 服务器与对应的用户名和密码,每次打开邮件客户端都会自动收取邮件。

IMAP 协议

此外,我们在配置邮件客户端的时候,经常还会看到 IMAP 选项:

IMAP (Internet Message Access Protocol,互联网邮件访问协议)也是接收电子邮件的协议。

它与 POP 协议的区别在于:在 POP 中邮件由客户端管理,而在 IMAP 中邮件由服务器管理。因此,在使用 IMAP 时,可以不必从服务器下载所有邮件就可以阅读。因为 IMAP 是在服务器上处理 MIME 信息,所以它可以实现一封邮件中有 10 个附件时只下载其中 7 个这样的功能,这在带宽较窄的线路上非常有用。而且 IMAP 在服务器上对「已读/未读」信息和邮件进行分类管理,因此,即使在不同的计算机上打开邮箱,也能保持同步,这样一来,人们就可以通过个人电脑、手机、公司电脑连接到 IMAP 服务器后接收邮件,并且同步状态。

显然,在多种异构终端中,使用 IMAP 协议收取电子邮件更方便。

IMAP 服务端监听端口一般是 143,我们可以在 TELNET 终端中通过命令模拟通过 IMAP 收取邮件:

常见的 IMAP 相关指令如下:

猜你喜欢

转载自www.cnblogs.com/stringarray/p/12968521.html