← RFC Reference

RFC 2045:MIME 第一部分 — 互联网信件体格式

Standards Track MIME — Multipurpose Internet Mail Extensions Published March 2026
ELI5: 原始电子邮件只能传输纯英文文本——就像电报一样。MIME 是信封的发明:它让你可以在电子邮件中放入照片、文档、HTML 页面和任何语言的文本。RFC 2045 定义了信封本身——那些标头说明"这封电子邮件包含用 UTF-8 编码的 HTML 正文"或"有一个用 base64 编码的 PDF 附件"。

存在的原因

RFC 5322(及其前身RFC 822)将电子邮件定义为纯US-ASCII文本,最大行长度为998个字符。这在1982年还可以,但对于现代电子邮件来说已不适用,现代电子邮件需要支持:

MIME(多用途互联网邮件扩展)是由五份RFC组成的套件,它扩展了电子邮件的功能以支持所有这些内容,同时保持与原始纯ASCII基础设施的向后兼容性。RFC 2045是第1部分:它定义了使其他一切成为可能的头字段和编码机制。

工作原理

RFC 2045引入了三个关键头字段和两种编码方案。

MIME-Version头

每条MIME消息必须包含:

MIME-Version: 1.0

这向接收邮件客户端表明该消息使用MIME约定。没有此头字段,该消息将按照RFC 5322作为纯US-ASCII文本处理。该版本自1996年以来一直是1.0,从未改变。

Content-Type头

声明正文的媒体类型和子类型,以及可选参数:

Content-Type: type/subtype; parameter=value

示例:

; 纯文本电子邮件(UTF-8)
Content-Type: text/plain; charset=utf-8

; HTML电子邮件
Content-Type: text/html; charset=utf-8

; PDF附件
Content-Type: application/pdf; name="invoice.pdf"

; 多部分消息(文本+HTML+附件)
Content-Type: multipart/mixed; boundary="----=_Part_123"

如果不存在Content-Type,默认值为text/plain; charset=us-ascii——保持与前MIME消息的向后兼容性。

Content-Transfer-Encoding头

SMTP被设计用来传送7位ASCII文本,行长度不超过998个字符。二进制数据(图像、PDF)和8位文本(UTF-8)必须编码才能符合这些限制。RFC 2045定义了五种传输编码:

编码 用途 开销
7bit US-ASCII文本(默认)。无需编码。 无
8bit 8位文本(如UTF-8)。需要8BITMIME SMTP扩展。 无
binary 任意二进制数据。需要BINARYMIME SMTP扩展。 无
quoted-printable 主要是ASCII文本,包含一些非ASCII字符。 约5-10%
base64 二进制数据(图像、文件)或大量非ASCII文本。 约33%

Quoted-Printable编码

为主要是ASCII但偶尔包含非ASCII字符的文本设计。每个非ASCII字节编码为=XX,其中XX是十六进制值。超过76个字符的行用末尾的=进行软换行。

; 原始文本:"René sent the café menu"
Content-Transfer-Encoding: quoted-printable

Ren=C3=A9 sent the caf=C3=A9 menu

=C3=A9是é(U+00E9)的UTF-8编码,每个字节都进行了十六进制编码。

Base64编码

将任意二进制数据编码为ASCII字符(A-Z、a-z、0-9、+、/)。每3个输入字节变成4个ASCII字符。行在76个字符处换行。

Content-Type: image/png; name="logo.png"
Content-Transfer-Encoding: base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34
AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAApgAAAKYB
zN+OGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBl

关键技术细节

Content-Disposition头

虽然不是RFC 2045本身的一部分(来自RFC 2183),Content-Disposition与MIME密切相关,且普遍使用:

; 内联显示(例如嵌入图像)
Content-Disposition: inline

; 作为可下载附件提供
Content-Disposition: attachment; filename="report.pdf"

完整的MIME消息

综合一切——一条具有文本和HTML正文以及附件的消息:

MIME-Version: 1.0
From: sender@example.com
To: recipient@example.com
Subject: Invoice attached
Content-Type: multipart/mixed; boundary="----=_outer"

------=_outer
Content-Type: multipart/alternative; boundary="----=_inner"

------=_inner
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Please find your invoice attached.

------=_inner
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

<p>Please find your invoice attached.</p>

------=_inner--
------=_outer
Content-Type: application/pdf; name="invoice.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="invoice.pdf"

JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PCAvVHlwZSAv
Q2F0YWxvZyAvUGFnZXMgMiAwIFIgPj4KZW5kb2JqCg==

------=_outer--

注意结构:multipart/mixed包含正文和附件。正文本身是multipart/alternative,包含文本和HTML版本。详见RFC 2046了解多部分类型的完整细节。

Charset参数

text/*类型上的charset参数声明字符编码。对于现代电子邮件,始终使用utf-8:

Content-Type: text/plain; charset=utf-8
Content-Type: text/html; charset=utf-8

iso-8859-1、windows-1252和shift_jis等旧字符集仍然存在,但不应在新消息中使用。

常见错误

可投递性影响

Related RFCs