← RFC Reference

RFC 2046: MIME Phần 2 — Các Loại Phương Tiện

Standards Track MIME — Multipurpose Internet Mail Extensions Published March 2026
ELI5: [RFC 2045](2045) xác định phong bì cho email. RFC 2046 xác định các loại nội dung bạn có thể đặt bên trong: văn bản, hình ảnh, âm thanh, video, ứng dụng — và quan trọng nhất là, cách để đặt nhiều nội dung trong một phong bì. Đó là lý do tại sao một email có thể chứa nội dung văn bản, nội dung HTML và ba tệp đính kèm.

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

RFC 2045 giới thiệu Content-Type và transfer encodings, nhưng nó không định nghĩa những loại nội dung nào tồn tại hoặc chúng hoạt động như thế nào. RFC 2046 lấp đầy khoảng trống đó bằng cách định nghĩa:

Đây là RFC giúp email hiện đại trở thành khả thi. Không có nó, mỗi email sẽ là một khối văn bản duy nhất.

Cách Nó Hoạt Động

Các Loại Phương Tiện Cấp Cao Nhất

Loại Mô Tả Các Kiểu Con Phổ Biến
text Văn bản có thể đọc được text/plain, text/html, text/calendar
image Dữ liệu hình ảnh image/png, image/jpeg, image/gif, image/svg+xml
audio Dữ liệu âm thanh audio/mpeg, audio/ogg
video Dữ liệu video video/mp4, video/webm
application Dữ liệu nhị phân hoặc định dạng có cấu trúc application/pdf, application/json, application/octet-stream
multipart Nhiều phần nội dung trong một tin nhắn multipart/mixed, multipart/alternative, multipart/related
message Tin nhắn email được đóng gói message/rfc822, message/delivery-status

Cơ Chế Multipart

Các loại multipart là trái tim của RFC 2046. Một tin nhắn multipart chứa tham số boundary để phân cách mỗi phần:

Content-Type: multipart/mixed; boundary="----=_boundary_001"

------ lời nói đầu (bị bỏ qua bởi các máy khách MIME) ------

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

Đây là phần đầu tiên.

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

Đây là phần thứ hai.

------=_boundary_001--
^^^ lưu ý -- ở cuối đánh dấu kết thúc

Các quy tắc chính cho ranh giới:

Các Kiểu Con Multipart

Kiểu con cho biết máy khách thư cách hiển thị các phần. Đây là nơi mà sự tinh tế nằm ở đó.

multipart/mixed — Các Phần Theo Trình Tự

Loại multipart phổ biến nhất. Các phần được hiển thị theo thứ tự. Được sử dụng cho "nội dung tin nhắn + tệp đính kèm":

Content-Type: multipart/mixed; boundary="----=_mixed"

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

Đây là báo cáo bạn yêu cầu.

------=_mixed
Content-Type: application/pdf; name="report.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="report.pdf"

JVBERi0xLjQKJeLjz9MK...

------=_mixed--

multipart/alternative — Cùng Nội Dung, Các Định Dạng Khác Nhau

Chứa nhiều phiên bản của cùng nội dung. Máy khách thư chọn phiên bản tốt nhất mà nó có thể hiển thị. Các phần được sắp xếp từ đơn giản nhất đến phong phú nhất — phần cuối cùng được ưu tiên:

Content-Type: multipart/alternative; boundary="----=_alt"

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

Chào mừng đến dịch vụ của chúng tôi!

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

<h1>Chào mừng đến dịch vụ của chúng tôi!</h1>
<p>Chúng tôi rất vui được có bạn.</p>

------=_alt--

Đây là cách mọi email HTML được xây dựng tốt hoạt động: phần văn bản/thường rơi vào đầu tiên, phiên bản văn bản/html rơi vào cuối cùng. Một máy khách hỗ trợ HTML hiển thị HTML; một máy khách văn bản thường hiển thị văn bản.

multipart/related — Các Phần Được Liên Kết

Được sử dụng khi các phần tham chiếu lẫn nhau. Trường hợp sử dụng phổ biến nhất là email HTML với hình ảnh nội tuyến. HTML tham chiếu hình ảnh bằng Content-ID (URL cid:):

Content-Type: multipart/related; boundary="----=_rel"

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

<p>Xem logo của chúng tôi:</p>
<img src="cid:logo@example.com" alt="Logo" />

------=_rel
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-ID: <logo@example.com>

iVBORw0KGgoAAAANSUhEU...

------=_rel--

multipart/digest — Bộ Sưu Tập Các Tin Nhắn

Một biến thể của mixed trong đó loại nội dung mặc định cho mỗi phần là message/rfc822 thay vì text/plain. Được sử dụng bởi các digest danh sách gửi thư. Hiếm khi thấy trong email hiện đại.

Các Chi Tiết Kỹ Thuật Chính

Các Loại Multipart Lồng Nhau

Sức mạnh thực sự của MIME đến từ sự lồng nhau. Một email tiếp thị điển hình với hình ảnh nội tuyến và tệp đính kèm trông như thế này:

; Cấu trúc tiêu chuẩn cho email HTML với hình ảnh nội tuyến + tệp đính kèm

Content-Type: multipart/mixed           ← ngoài: nội dung + tệp đính kèm
  |
  |-- multipart/alternative              ← nội dung: văn bản hoặc HTML
  |     |-- text/plain                    ← dự phòng văn bản thường
  |     |-- multipart/related             ← HTML + hình ảnh nội tuyến
  |           |-- text/html               ← nội dung HTML
  |           |-- image/png (cid:logo)    ← hình ảnh nội tuyến
  |
  |-- application/pdf (attachment)       ← tệp đính kèm

Sự lồng nhau ba cấp này là mẫu tiêu chuẩn được sử dụng bởi hầu như mọi thư viện email và nhà cung cấp dịch vụ email.

Loại message/rfc822

Đóng gói toàn bộ tin nhắn email dưới dạng phần nội dung. Được sử dụng để chuyển tiếp tin nhắn dưới dạng tệp đính kèm và trong thông báo bounce (RFC 3462 multipart/report). Tin nhắn được đóng gói có các tiêu đề riêng của nó (From, To, Subject, v.v.) và nội dung.

Dự Phòng application/octet-stream

Khi loại nội dung của tệp không xác định, hãy sử dụng application/octet-stream. Điều này cho máy khách biết rằng hãy coi nó như dữ liệu nhị phân chung và thường kích hoạt lời nhắc tải xuống. Nó tương đương MIME với "Tôi không biết cái này là gì; lưu nó lại và tìm ra bản thân".

Yêu Cầu Ranh Giới

Chuỗi ranh giới có những quy tắc cụ thể:

Những Lỗi Phổ Biến

Tác Động Về Khả Năng Gửi

Related RFCs