技术解析 · 附来源的解答
MIME:多用途互联网邮件扩展
MIME 是 Multipurpose Internet Mail Extensions(多用途互联网邮件扩展)的缩写。它是对原始简单邮件传输协议(SMTP)的扩展标准,使邮件能够交换图片、音频、视频和应用程序数据等非文本内容,以及 HTML 等富文本格式。
MIME 的工作原理
MIME 通过在邮件中添加特定的邮件头,告诉收件方的邮件客户端如何处理正文。其中最关键的是 Content-Type 头,它定义了数据的媒体类型。例如,text/plain 表示纯文本,text/html 表示带格式的网页。当一封邮件中包含多种类型的内容时,会使用 multipart/mixed 或 multipart/alternative 类型将不同部分组合在一起。
对发件人的重要性
MIME 对现代邮件的送达率和用户体验至关重要。没有它,邮件将只能使用 7 位 ASCII 字符,既无法实现国际化,也无法使用附件。借助 MIME,发件人可以在 HTML 版本之外提供一个作为备用的纯文本版本,确保无论收件人的邮件客户端能力如何,邮件都可阅读。
运维说明与常见错误
一个常见错误是没有在 Content-Type 头中设置正确的 charset,导致字符损坏或乱码。另一个问题是多部分邮件中的边界(boundary)定义不正确,这可能导致邮件显示为原始代码或附件丢失。开发者应确保使用 Base64 对二进制数据进行正确编码,以免在经过 SMTP 中继传输时损坏。
具体示例
一封带附件的 HTML 邮件,其典型的 MIME 头如下:Content-Type: multipart/mixed; boundary=boundary_123。在正文中,第一部分标记为 Content-Type: text/html; charset=UTF-8,用于邮件正文;第二部分标记为 Content-Type: application/pdf; name=invoice.pdf,用于文件。您可以使用 SendHQ 或其免费工具(https://sendhq.cc/tools)分析邮件头的结构。
编码机制
由于 SMTP 是为文本设计的,MIME 使用编码方案来传输二进制数据。Base64 是最常用的方法,它将二进制文件转换为 ASCII 字符串。Quoted-Printable 编码用于以 ASCII 为主、只含少量非 ASCII 字符的文本,与 Base64 相比开销更小,同时保持与旧邮件系统的兼容性。
团队常问的问题
MIME 和 SMTP 是一回事吗?
不是。SMTP 是在服务器之间传输邮件的协议,而 MIME 是定义所传输内容格式的标准。
什么是 multipart/alternative MIME 类型?
当同一内容以多种格式(例如纯文本和 HTML)发送时使用该类型,让邮件客户端选择最合适的版本进行显示。
MIME 为什么使用 Base64?
Base64 将二进制数据编码为 ASCII 文本,确保数据在经过仅支持 7 位文本的邮件服务器时保持完整。
MIME 可以用于邮件以外的应用吗?
可以。MIME 类型体系(现称为媒体类型,Media Types)在整个 Web 中广泛使用,包括在 HTTP 头中描述正在下载或上传的文件类型。
一手资料
- RFC 2045:MIME 第一部分:互联网邮件正文格式 — RFC Editor
- RFC 5322:互联网邮件格式 — RFC Editor