多用途互联网邮件扩展协议
多用途互联网邮件扩展(MIME)是一项互联网标准,扩展了电子邮件格式以支持:
- 使用非 US-ASCII 字符集的文本;
- 非文本附件;
- 多部分消息体;以及
- 非 ASCII 字符集的头部信息。
SMTP 仅支持 7 位 ASCII 字符,这实际上意味着它只支持少数语言。基于拉丁字母的语言在 SMTP 中可以正常使用;其他语言在邮件投递时无法正确显示。MIME 则扩展了 SMTP 的 ASCII 字符支持,使得使用其他字符集、图像和音频的邮件可以发送和显示。通常,所有邮件客户端和 SMTP 服务器都能正确映射 MIME 格式的消息。
Understanding MIME Headers
MIME 头部包含有关协议的信息。
MIME-Version
这表明该消息为 MIME 格式。显示为:
MIME-Version: 1.0
Content-Type
这表示消息的内容类型,以类型和子类型对的形式给出,例如 text/plain、text/html。multipart 内容类型可以包含文本、HTML、附件、图像、音频、视频等。
Content-Type: multipart
Content-Transfer-Encoding
指示是否在 content-type 指定的编码之上使用二进制到文本的编码方案。如果使用,说明是哪一种。我们可以在此指定 7-bit、8-bit 和 binary 编码类型。
Encoded-Word
SMTP 消息头通常使用 ASCII 字符。非 ASCII 字符必须使用 MIME 编码词语法,而不是文字字符串。格式如下:
"=? charset ? encoding ? encoded text ?=".
Multipart-Messages
MIME multipart 消息在 content-type 头部中包含一个边界。此边界不得出现在任何部分中,它放置在各部分之间以及消息正文的开头和结尾,如下所示:
MIME-version: 1.0
Content-type: multipart/mixed; boundary="frontier"
This is a multi-part message in MIME format.
--frontier
Content-type: text/plain
This is the body of the message.
--frontier
Content-type: application/octet-stream
Content-transfer-encoding: base64
PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA+VGhpcyBpcyB0aGUg
Ym9keSBvZiB0aGUgbWVzc2FnZS48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==
--frontier--
每个部分由其自己的内容头部和正文组成。
Multipart 子类型
MIME 标准定义了各种 multipart 消息子类型。子类型在整体消息的 “Content-Type” 头部中指定。
以下是最常用的子类型列表。
- Mixed:Multipart/mixed 用于在正文中发送具有不同 “Content-Type” 头的文件。如果发送图片或其他易读文件,大多数邮件客户端会在正文中直接显示它们。
- Message:消息部分包含一封电子邮件。
- Digest:Digest 是一种发送多条文本消息的简易方式。每个部分的默认 content-type 为 "message/rfc822"。
- Alternative:替代子类型表示每个部分都是相同(或相似)内容的“替代”版本,每个以其 “Content-Type” 头部标示的不同格式呈现。
最常见的是 multipart/alternative,用于包含两个部分的电子邮件,一个纯文本 (text/plain) 和一个 HTML (text/html)。纯文本部分提供向后兼容性,而 HTML 部分允许使用格式和超链接。大多数邮件客户端提供用户选项,以在 HTML 之上偏好纯文本;这就是本地因素可能影响应用程序选择显示哪一“最佳”部分的示例。