← RFC Reference

RFC 2045: MIME Phần 1 — Định dạng Phần Thân Thông điệp Internet

Standards Track MIME — Multipurpose Internet Mail Extensions Published March 2026
ELI5: Email gốc chỉ có thể chứa văn bản tiếng Anh thuần túy — giống như một bức điện. MIME là phát minh của phong bì: nó cho phép bạn đặt ảnh, tài liệu, trang HTML và văn bản bằng bất kỳ ngôn ngữ nào vào bên trong email. RFC 2045 định nghĩa phong bì chính nó — các tiêu đề cho biết "email này chứa nội dung HTML được mã hóa trong UTF-8" hoặc "có một tệp PDF được đính kèm, được mã hóa trong base64."

Tại Sao Điều Này Tồn Tại

RFC 5322 (và tiền thân RFC 822) đã định nghĩa email là văn bản US-ASCII thuần túy có độ dài dòng tối đa 998 ký tự. Điều đó tốt vào năm 1982. Nó không tốt cho email hiện đại, cần phải chứa:

MIME (Multipurpose Internet Mail Extensions) là một bộ năm RFC mở rộng email để xử lý tất cả những điều này trong khi vẫn tương thích ngược với cơ sở hạ tầng chỉ hỗ trợ ASCII gốc. RFC 2045 là Phần 1: nó định nghĩa các trường tiêu đề và cơ chế mã hóa làm cho tất cả những điều khác có thể xảy ra.

Cách Hoạt Động

RFC 2045 giới thiệu ba trường tiêu đề quan trọng và hai lược đồ mã hóa.

Tiêu Đề MIME-Version

Mỗi tin nhắn MIME phải bao gồm:

MIME-Version: 1.0

Điều này báo hiệu cho các ứng dụng mail nhận được rằng tin nhắn sử dụng các quy ước MIME. Nếu không có tiêu đề này, tin nhắn được coi là văn bản US-ASCII thuần túy theo RFC 5322. Phiên bản đã được 1.0 kể từ năm 1996 và chưa bao giờ thay đổi.

Tiêu Đề Content-Type

Khai báo loại phương tiện và kiểu con của nội dung, cộng với các tham số tùy chọn:

Content-Type: type/subtype; parameter=value

Ví dụ:

; Email văn bản thuần túy trong UTF-8
Content-Type: text/plain; charset=utf-8

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

; Tệp đính kèm PDF
Content-Type: application/pdf; name="invoice.pdf"

; Tin nhắn đa phần (văn bản + HTML + tệp đính kèm)
Content-Type: multipart/mixed; boundary="----=_Part_123"

Nếu không có Content-Type, giá trị mặc định là text/plain; charset=us-ascii — duy trì tương thích ngược với các tin nhắn trước MIME.

Tiêu Đề Content-Transfer-Encoding

SMTP được thiết kế để chứa văn bản ASCII 7-bit với các dòng không dài hơn 998 ký tự. Dữ liệu nhị phân (hình ảnh, PDF) và văn bản 8-bit (UTF-8) phải được mã hóa để phù hợp với những hạn chế này. RFC 2045 định nghĩa năm mã hóa truyền tải:

Mã Hóa Trường Hợp Sử Dụng Chi Phí Chung
7bit Văn bản US-ASCII (mặc định). Không cần mã hóa. Không
8bit Văn bản 8-bit (ví dụ: UTF-8). Yêu cầu phần mở rộng SMTP 8BITMIME. Không
binary Dữ liệu nhị phân tùy ý. Yêu cầu phần mở rộng SMTP BINARYMIME. Không
quoted-printable Văn bản chủ yếu ASCII với một số ký tự không phải ASCII. ~5-10%
base64 Dữ liệu nhị phân (hình ảnh, tệp) hoặc văn bản có nhiều ký tự không phải ASCII. ~33%

Mã Hóa Quoted-Printable

Được thiết kế cho văn bản chủ yếu là ASCII với các ký tự không phải ASCII thỉnh thoảng. Mỗi byte không phải ASCII được mã hóa là =XX trong đó XX là giá trị hex. Các dòng dài hơn 76 ký tự được gói mềm bằng = ở cuối.

; Gốc: "René sent the café menu"
Content-Transfer-Encoding: quoted-printable

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

=C3=A9 là mã hóa UTF-8 của é (U+00E9), với mỗi byte được mã hóa hex.

Mã Hóa Base64

Mã hóa dữ liệu nhị phân tùy ý thành các ký tự ASCII (A-Z, a-z, 0-9, +, /). Mỗi 3 byte đầu vào trở thành 4 ký tự ASCII. Các dòng được gói tại 76 ký tự.

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

iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34
AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAApgAAAKYB
zN+OGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBl

Chi Tiết Kỹ Thuật Chính

Tiêu Đề Content-Disposition

Mặc dù không phải là một phần của RFC 2045 (nó đến từ RFC 2183), Content-Disposition liên quan chặt chẽ và được sử dụng rộng rãi với MIME:

; Hiển thị nội tuyến (ví dụ: hình ảnh được nhúng)
Content-Disposition: inline

; Cung cấp như một tệp đính kèm có thể tải xuống
Content-Disposition: attachment; filename="report.pdf"

Một Tin Nhắn MIME Hoàn Chỉnh

Đặt tất cả lại với nhau — một tin nhắn có cả nội dung văn bản và HTML, cộng với một tệp đính kèm:

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--

Lưu ý cấu trúc: multipart/mixed chứa nội dung và tệp đính kèm. Bản thân nội dung là multipart/alternative với phiên bản văn bản và HTML. Xem RFC 2046 để biết toàn bộ chi tiết về các loại đa phần.

Tham Số Charset

Tham số charset trên các loại text/* khai báo mã hóa ký tự. Đối với email hiện đại, luôn sử dụng utf-8:

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

Các bộ ký tự cũ như iso-8859-1, windows-1252, và shift_jis vẫn được gặp nhưng không nên được sử dụng trong các tin nhắn mới.

Những Sai Lầm Thường Gặp

Tác Động Đến Khả Năng Gửi

Related RFCs