电子邮件系统的组成结构与 MIME

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

本页讲邮件系统由哪些部件组成、邮件长什么样、以及 MIME 解决了什么问题;两个协议(SMTP 与 POP3)的细节见 6.4.3。本页 1 道错题:邮件头里哪些字段是系统自动生成的。

机制

6.4.1 电子邮件系统的组成结构

一个电子邮件系统应具有三个最主要的组成构件,即用户代理、邮件服务器和电子邮件使用的协议(如 SMTP、POP3 或 IMAP 等)。

flowchart LR
  UA1["发件人用户代理<br/>(SMTP 客户)"] -- "发送邮件 SMTP / TCP 连接" --> MS1["发送方邮件服务器<br/>(SMTP 服务器 + SMTP 客户)"]
  MS1 -- "发送邮件 SMTP / TCP 连接" --> MS2["接收方邮件服务器<br/>(SMTP 服务器 + POP3 服务器)"]
  MS2 -- "读取邮件 POP3 / TCP 连接" --> UA2["收件人用户代理<br/>(POP3 客户)"]

用户代理(UA):用户与电子邮件系统的接口。用户代理向用户提供一个很友好的接口来发送和接收邮件,用户代理至少应当具有撰写、显示和邮件处理的功能。通常情况下,用户代理就是一个运行在 PC 上的程序(电子邮件客户端软件),常见的有 Outlook 和 Foxmail 等。

邮件服务器:它的功能是发送和接收邮件,同时还要向发件人报告邮件传送的情况(已交付、被拒绝、丢失等)。邮件服务器以客户/服务器模式工作,但它必须能够同时充当客户和服务器。 例如,当邮件服务器 A 向邮件服务器 B 发送邮件时,A 就作为 SMTP 客户,而 B 是 SMTP 服务器;反之,当 B 向 A 发送邮件时,B 就是 SMTP 客户,而 A 就是 SMTP 服务器。

邮件发送协议和读取协议(邮件发送协议和读取协议的应用 2012 年考过):邮件发送协议用于用户代理向邮件服务器发送邮件或在邮件服务器之间发送邮件,如 SMTP;邮件读取协议用于用户代理从邮件服务器读取邮件,如 POP3。注意:用推()用拉()即用户代理向邮件服务器发送邮件及在邮件服务器之间发送邮件时,SMTP 客户将邮件推送到 SMTP 服务器;而用户读取邮件时,用户代理向邮件服务器发出请求,拉取用户邮箱中的邮件。

电子邮件的收发过程如下:

  1. 发件人调用用户代理来撰写和编辑要发送的邮件。
  2. 邮件撰写完后,发件人点击”发送邮件”按钮,把发送邮件的工作全都交给用户代理来完成。用户代理用 SMTP 把邮件传送给发送端邮件服务器。
  3. 发送端邮件服务器将邮件放入邮件缓存队列中,等待发送。
  4. 发送端邮件服务器的 SMTP 客户与接收端邮件服务器的 SMTP 服务器建立 TCP 连接,然后就把邮件缓存队列中的邮件依次发送出去。注意,邮件是直接传送给接收端邮件服务器的,而不会在互联网的某个中间邮件服务器落地。
  5. 运行在接收端邮件服务器中的 SMTP 服务器进程收到邮件后,将邮件放入收件人的用户邮箱,等待收件人在方便时进行读取。
  6. 收件人打算收信时,调用用户代理,使用 POP3(或 IMAP)协议将自己的邮件从接收端邮件服务器的用户邮箱中取回。

6.4.2 电子邮件格式

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

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

关键字是否必填谁来填
To必填用户填入一个或多个收件人的电子邮件地址
Subject可选用户填写邮件主题
From必填通常由邮件系统自动填入
发送时间——由系统自动生成

电子邮件地址的格式为:收件人邮箱名@邮箱所在主机的域名,如 abc@cskaoyan.com,其中邮箱名 abc 在 cskaoyan.com 这个邮件服务器上必须是唯一的,这也就保证了该邮件地址在整个因特网上是唯一的。首部与主体之间用一个空行进行分割。

多用途因特网邮件扩展(MIME)

因为 SMTP 只能传送 7 位 ASCII 码文本邮件,许多其他非英语国家的文字(如中文、俄文,甚至带重音符号的法文或德文)就无法传送,且无法传送可执行文件及其他二进制对象,所以提出了多用途因特网邮件扩展(MIME)(SMTP 直接传输的内容 2018 年考过)。

MIME 并未改动 SMTP 或取代它。 当发送端发送的邮件中包含有非 ASCII 码数据时,不能直接使用 SMTP 进行传送,而要通过 MIME 进行转换,将非 ASCII 码数据转换为 ASCII 码数据,之后就可以使用 SMTP 进行传送;接收端也要使用 MIME 对接收到的 ASCII 码数据进行逆转换。

flowchart LR
  U1["用户"] -- 非 ASCII 码 --> M1["MIME"] -- 7 位 ASCII 码 --> S1["SMTP"]
  S1 -- 7 位 ASCII 码 --> S2["SMTP"]
  S2 -- 7 位 ASCII 码 --> M2["MIME"] -- 非 ASCII 码 --> U2["用户"]

MIME 主要包括以下三部分内容:

  1. 5 个新的邮件首部字段,包括 MIME 版本、内容描述、内容标识、传送编码和内容类型。
  2. 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化。
  3. 定义了传送编码,可对任何内容格式进行转换,而不会被邮件系统改变。

边界

错题复盘:邮件头里只有一部分由系统自动生成,收信人地址和主题要用户自己填

王道 6.4.4 第 7 题:下列关于电子邮件格式的说法中,错误的是(A. 电子邮件内容包括邮件头与邮件体两部分 B. 邮件头中发信人地址(From:)、发送时间、收信人地址(To:)及邮件主题(Subject:)是由系统自动生成的 C. 邮件体是实际要传送的信函内容 D. MIME 允许电子邮件系统传输文字、图像、语音与视频等多种信息)。答案 B。

邮件头是由多项内容构成的,其中一部分是由系统自动生成的,如发信人地址(From:)、发送时间;另一部分是由发件人输入的,如收信人地址(To:)、邮件主题(Subject:)等。

这一条对着自己的邮件客户端就能验证:打开写信窗口,“发件人”和时间是填好的,“收件人”和”主题”要自己敲。B 的错处在于把两类混为一谈。

邮件直接送到接收端邮件服务器,不会在中间服务器落地。 与 IP 分组逐跳转发不同,SMTP 是两个邮件服务器之间的端到端传送。

用户代理至少要有撰写、显示和邮件处理三种功能。

SMTP 只能传 7 位 ASCII 码文本。 所以 JPEG、MPEG、EXE 都必须先经 MIME 转换;2018 年真题问”无须转换即可由 SMTP 直接传输的内容”,答案是 ASCII 文本。

MIME 没有取代 SMTP。 它只是在 SMTP 之上做了一层编码转换。

邮件系统是异步通信。 收发双方不需要同时在线,这是它与即时通信的根本区别。

口径差异:今天的邮件与 Web 邮箱

教材口径:用户代理是 Outlook、Foxmail 这类客户端程序,发信用 SMTP、收信用 POP3。

工程口径:用浏览器登录 163、Gmail 时,浏览器与邮件服务器之间用的是 HTTP/HTTPS,只有在不同邮件服务器之间传送邮件时才使用 SMTP(王道 6.4.4 第 4 题正是考这一点)。今天的 SMTP 已扩展为 ESMTP,支持 8 位编码传输与认证加密(SMTPS/STARTTLS);收信侧 IMAP 也已基本取代 POP3。

考试按教材口径作答。

对照速查

说法对错
电子邮件系统的三大构件是用户代理、邮件服务器和邮件协议✅
邮件服务器只作为服务器工作❌(同时充当客户和服务器)
SMTP 使用推(Push)方式,POP3 使用拉(Pull)方式✅(2012)
邮件在传送途中会在中间邮件服务器落地❌
邮件内容分为首部和主体,两者之间用空行分割✅
From、发送时间、To、Subject 都由系统自动生成❌
电子邮件地址的格式是”用户名@主机域名”✅
SMTP 可以直接传送 JPEG 图像❌(需 MIME 转换,2018)
MIME 取代了 SMTP❌
MIME 定义了 5 个新的邮件首部字段✅

考点

  • 三大构件;用户代理的三项功能;邮件服务器同时充当客户与服务器
  • SMTP 推、POP3 拉(2012);六步收发过程
  • 邮件格式:信封 / 内容(首部 + 主体);To、Subject 由用户填,From、时间由系统填
  • SMTP 只能传 7 位 ASCII(2018);MIME 的三部分内容

链接