6.4 电子邮件
对应王道教材 6.4 节(教材 P283–P286)· 本节属于 408 考纲范围
6.4.1 电子邮件系统的组成结构
作为一种异步通信方式,电子邮件不要求通信双方同时在线。发送端将邮件发送至收件人所用的邮件服务器,并存入其邮箱,收件人可随时登录自己的邮件服务器读取邮件。
完整的电子邮件系统应包含如图 6.8 所示的三个主要组成部分:用户代理(User Agent)、邮件服务器,以及电子邮件所依赖的协议(如 SMTP、POP3 或 IMAP 等)。

- 用户代理(UA):用户与电子邮件系统之间的接口。用户代理为用户提供友好的操作界面,用于发送和接收邮件,至少应具备撰写、显示和处理邮件等基本功能。通常,用户代理是运行在个人计算机上的电子邮件客户端软件,如 Outlook、Foxmail 等。
- 邮件服务器:负责邮件的发送与接收,并向发件人反馈邮件传送状态(如已投递、被拒收或丢失等)。邮件服务器采用客户/服务器模式工作,但需具备双重角色:既能作为服务器接收邮件,又能作为客户发送邮件。例如,当邮件服务器 A 向邮件服务器 B 发送邮件时,A 扮演 SMTP 客户,B 则作为 SMTP 服务器;反之亦然。
- 邮件发送协议和读取协议:用户代理使用邮件发送协议向邮件服务器发送邮件,或在邮件服务器之间传递邮件,典型代表是 SMTP;用户代理使用邮件读取协议从邮件服务器获取邮件,如 POP3 或 IMAP。
SMTP 采用推(Push)的方式,即用户代理或发送端邮件服务器主动将邮件推送至目标服务器;而 POP3 采用拉(Pull)的方式,即用户代理读取邮件时,主动向服务器发起请求,拉取邮箱中的邮件。
电子邮件的发送与接收过程可简化为如图 6.9 所示。

- 发件人通过用户代理撰写和编辑待发送的邮件;
- 邮件撰写完后,发件人点击"发送"按钮,后续发送工作由用户代理自动完成。用户代理使用 SMTP 协议将邮件传送给发送端的邮件服务器;
- 发送端邮件服务器将邮件暂存在邮件缓存队列中,等待发送;
- 发送端邮件服务器的 SMTP 客户端与接收端邮件服务器的 SMTP 服务器建立 TCP 连接,并依次将缓存队列中的邮件直接发送至接收端邮件服务器;
- 接收端邮件服务器中的 SMTP 服务器进程收到邮件后,将其存入对应收件人的邮箱,等待收件人读取;
- 当收件人准备查收邮件时,启动用户代理,通过 POP3(或 IMAP)协议从接收端邮件服务器的邮箱中下载邮件(前提是邮箱中有新邮件)。
6.4.2 电子邮件格式与 MIME
1.电子邮件格式
一封电子邮件由信封和内容两大部分组成,其中邮件内容又分为首部和主体两部分。RFC 822 规定了邮件首部的格式,而主体部分则由用户自由撰写。用户只需填写首部信息,邮件系统便会自动从中提取所需信息并生成信封,无须用户手动填写信封内容。
邮件内容的首部由若干首部行构成,每行由一个关键字、冒号及对应的值组成。其中有些关键字是必需的,有些则是可选的。最重要的关键字包括 To 和 Subject:
- To 是必填关键字,用于指定一个或多个收件人的电子邮件地址。电子邮件地址的格式为:收件人邮箱名@邮箱所在主机的域名,例如 abc@cskaoyan.com。其中,邮箱名 abc 在 cskaoyan.com 所对应的邮件服务器上必须是唯一的,从而确保该地址在整个互联网范围内是唯一的。
- Subject 是可选关键字,用于标明邮件的主题,简要反映邮件的主要内容。
- 此外,还有一个必填的关键字是 From,但通常由邮件系统自动填充,用户一般无须手动输入。
首部与主体之间以一个空行分隔。
2.多用途互联网邮件扩展(MIME)
由于 SMTP 协议仅支持传输 7 位 ASCII 码文本邮件,因此无法直接传送非英语字符(如中文、俄文,甚至带重音符号的法文或德文),也无法传输可执行文件或其他二进制对象。为解决这一限制,提出了多用途互联网邮件扩展(Multipurpose Internet Mail Extensions,MIME)。
MIME 并未修改或取代 SMTP,而是在其基础上进行扩展。当发送端需要传输包含非 ASCII 数据的邮件时,不能直接通过 SMTP 发送,而要先用 MIME 将非 ASCII 数据编码为 ASCII 格式,再交由 SMTP 传输。接收端收到邮件后,再通过 MIME 对 ASCII 数据进行解码还原,进而恢复原始的非 ASCII 内容。MIME 与 SMTP 的关系如图 6.10 所示。

MIME 主要包括以下三部分内容:
- 定义了 5 个新的首部字段:MIME 版本、内容描述、内容标识、传送编码和内容类型;
- 标准化了多种邮件内容的格式,为多媒体电子邮件的表示方法提供了统一规范;
- 定义了传送编码机制,能够对任意类型的内容进行编码转换,而不会被邮件系统改变。
6.4.3 SMTP 和 POP3 考点
1.SMTP
简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)是一种用于提供可靠且高效电子邮件传输的协议,它规范了两个相互通信的 SMTP 进程之间如何交换信息。SMTP 采用客户/服务器模式:负责发送邮件的进程作为 SMTP 客户,而负责接收邮件的进程则作为 SMTP 服务器。SMTP 基于 TCP 连接,使用熟知端口号 25。其通信过程可分为以下三个阶段。
(1)连接建立
当发件人的邮件被送入发送端邮件服务器的缓存队列后,SMTP 客户会定期扫描该队列。一旦发现待发邮件,便主动与接收端邮件服务器的 SMTP 服务器建立 TCP 连接(目标端口为 25)。连接成功后,接收端 SMTP 服务器首先发送 220 Service ready(服务就绪)。随后,SMTP 客户向服务器发送 HELO 命令,并附上发送端的主机名,以标识自身身份。
TCP 连接始终在发送端与接收端的邮件服务器之间直接建立,不论二者的地理位置相距多远,也不论数据需要经过多少个路由器。若接收端邮件服务器因故障暂时无法响应,则发送端邮件服务器将等待一段时间后重新尝试连接。
(2)邮件传送
连接建立后,即可开始邮件传送。该过程以 MAIL 命令开始,其后跟随发件人地址,例如 MAIL FROM: <fh@hit.edu.cn>。若 SMTP 服务器已准备好接收邮件,则返回 250 OK。随后,客户端发送一个或多个 RCPT 命令,格式为 RCPT TO: <收件人地址>。每个 RCPT 命令都会触发服务器的响应,如 250 OK(连接成功)或 550 No such user here(无此用户)。
RCPT 命令的作用是预先验证收件人地址的有效性,确保接收端系统已做好接收准备,进而避免在发送长篇邮件后才发现地址错误,造成通信资源浪费。
收到所有 RCPT 命令的肯定响应后,客户端发送 DATA 命令,表示即将传送邮件内容。服务器正常情况下会回复:354 Start mail input; end with <CRLF>.<CRLF>(<CRLF> 表示回车换行符)。此后,SMTP 客户开始逐行发送邮件内容,并用 <CRLF>.<CRLF> 作为邮件内容的结束标志。
(3)连接释放
邮件发送完成后,SMTP 客户应发送 QUIT 命令。SMTP 服务器返回的信息是 221(服务关闭),表示同意释放 TCP 连接。至此,本次邮件传送过程全部结束。
2.POP3 和 IMAP
邮局协议(Post Office Protocol,POP)是一种结构简单但功能有限的邮件读取协议,目前使用的是第 3 版 POP3。POP3 同样采用客户/服务器模式,在传输层基于 TCP,使用端口号 110。用户代理需运行 POP3 客户程序,对应的邮件服务器则运行 POP3 服务器程序。POP3 支持两种工作模式:
- 下载并保留:用户从服务器读取邮件后,邮件仍保留在服务器上,可供后续再次访问;
- 下载并删除:邮件一旦被成功读取,即从服务器上删除。
另一种邮件读取协议是互联网报文存取协议(IMAP)。与 POP3 相比,IMAP 的功能更强大:它支持用户在服务器端创建文件夹、在不同文件夹之间移动邮件,以及对远程邮箱中的邮件进行搜索等在线操作。为此,IMAP 服务器需要维护用户的会话状态信息。
此外,IMAP 还支持选择性获取邮件内容,即用户代理可以只下载邮件的特定部分。例如只获取其首部,或只提取多部分 MIME 邮件中的某部分。这一特性在低带宽环境下尤为实用:用户无须下载整封包含音频、视频等大附件的邮件,即可快速浏览或筛选内容。
随着万维网(WWW)的普及,出现了大量基于 Web 的电子邮件服务,如 Hotmail、Gmail 等。这类服务的特点是:用户浏览器与邮件服务器之间的交互(包括发送和读取邮件)均通过 HTTP 完成,而仅在不同邮件服务器之间传递邮件时才使用 SMTP。
常用协议端口小结
| 应用程序 | FTP 数据连接 | FTP 控制连接 | SMTP | DNS | HTTP | POP3 |
|---|---|---|---|---|---|---|
| 使用协议 | TCP | TCP | TCP | UDP | TCP | TCP |
| 熟知端口号 | 20 | 21 | 25 | 53 | 80 | 110 |