← RFC Reference

RFC 2049: MIME Phần 5 — Tiêu chí Tuân thủ và Ví dụ

Standards Track MIME — Multipurpose Internet Mail Extensions Published March 2026
ELI5: RFC 2045–2047 định nghĩa các quy tắc của MIME. RFC 2049 là bài kiểm tra: nó quy định chính xác những gì phần mềm của bạn phải làm để vượt qua kiểm tra "tuân thủ MIME" và cung cấp các ví dụ cụ thể để kiểm tra cách triển khai của bạn. Nếu MIME là một quy tắc xây dựng, đây là danh sách kiểm tra thanh tra.

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

Thông số MIME trải dài bốn RFC kỹ thuật (2045, 2046, 2047, và 2048). Những người triển khai cần một câu trả lời rõ ràng: "phần tối thiểu phần mềm của tôi phải xử lý để tuân thủ MIME là gì?" RFC 2049 cung cấp câu trả lời đó, cùng với các thông điệp kiểm tra chuẩn mà những người triển khai có thể sử dụng để xác minh bộ phân tích cú pháp của họ.

Không có tài liệu tuân thủ, các triển khai khác nhau sẽ hỗ trợ các tập hợp con khác nhau của MIME, dẫn đến lỗi khả năng tương tác. RFC 2049 đặt ra ngưỡng tối thiểu: mọi hệ thống nhận biết MIME phải ít nhất xử lý các loại nội dung, mã hóa và cấu trúc này.

Cách Nó Hoạt Động

RFC 2049 xác định hai mức độ tuân thủ, mỗi mức có yêu cầu cụ thể.

Yêu Cầu Đối Với Tác Nhân Gửi

Một tác nhân gửi tuân thủ MIME (MUA hoặc thư viện email) phải:

  1. Luôn bao gồm MIME-Version: 1.0 trong mọi thông điệp sử dụng các tính năng MIME.
  2. Bao gồm tiêu đề Content-Type khi nội dung là bất cứ thứ gì khác ngoài văn bản US-ASCII thuần túy.
  3. Sử dụng Content-Transfer-Encoding hợp lệ để đảm bảo nội dung thông điệp có thể vượt qua các cổng SMTP 7-bit (base64 hoặc quoted-printable cho nội dung không phải ASCII).
  4. Mã hóa các trường tiêu đề đúng cách sử dụng các từ được mã hóa RFC 2047 khi các ký tự không phải ASCII xuất hiện trong các tiêu đề như tên hiển thị Subject hoặc From.
  5. Tạo ranh giới multipart hợp lệ không xuất hiện trong bất kỳ phần nội dung đóng nào.

Yêu Cầu Đối Với Tác Nhân Nhận

Một tác nhân nhận tuân thủ MIME phải:

  1. Nhận dạng MIME-Version: 1.0 và xử lý thông điệp là mã hóa MIME.
  2. Phân tích cú pháp các tiêu đề Content-Type và Content-Transfer-Encoding, bao gồm tất cả các tham số.
  3. Giải mã base64 và quoted-printable mã hóa truyền nội dung.
  4. Xử lý tất cả các loại multipart — tối thiểu multipart/mixed, multipart/alternative, multipart/digest, và multipart/parallel. Các kiểu con multipart không xác định phải được xử lý như multipart/mixed.
  5. Xử lý message/rfc822 — hiển thị thông điệp được đóng gói hoặc ít nhất cung cấp nó để lưu.
  6. Xử lý các loại nội dung không được nhận dạng một cách khéo léo — cung cấp tùy chọn lưu phần nội dung dưới dạng tập tin thay vì gặp sự cố hoặc loại bỏ nó im lặng. Các loại không được nhận dạng phải được xử lý như application/octet-stream.
  7. Giải mã các từ được mã hóa RFC 2047 trong các trường tiêu đề.
  8. Xử lý tham số charset trên các loại văn bản, hỗ trợ ít nhất US-ASCII và ISO-8859-1, và lý tưởng nhất là UTF-8.

Nguyên Tắc Tính Vững Chắc

RFC 2049 củng cố Luật Postel cho MIME: khắt khe về những gì bạn gửi, tự do về những gì bạn chấp nhận. Một bộ nhận tuân thủ phải cố gắng hết sức để hiển thị ngay cả những thông điệp MIME hơi sai lệch thay vì từ chối chúng hoàn toàn.

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

Ví Dụ Chuẩn

RFC 2049 bao gồm các ví dụ được thực hiện của các thông điệp MIME. Đây là mô hình cho một thông điệp multipart/alternative được định dạng tốt với cả văn bản thuần túy và HTML:

MIME-Version: 1.0
From: sender@example.com
To: recipient@example.com
Subject: MIME conformance test
Content-Type: multipart/alternative; boundary="boundary42"

--boundary42
Content-Type: text/plain; charset=us-ascii

This is the plain text version.

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

<html><body><p>This is the <strong>HTML</strong> version.</p></body></html>

--boundary42--

Xử Lý Các Loại Không Xác Định

Một yêu cầu tuân thủ chính: khi một tác nhân nhận gặp phải Content-Type mà nó không hiểu, nó phải xử lý nó như application/octet-stream và cung cấp tùy chọn lưu. Quy tắc này đảm bảo khả năng tương thích về phía trước — các loại phương tiện mới có thể được định nghĩa mà không làm hỏng các máy khách hiện tại.

; Unknown type encountered by a client
Content-Type: application/vnd.custom-format
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="data.custom"

; Conformant client treats this as application/octet-stream
; and offers the user a "Save As" dialog

Các Kiểu Con Multipart Không Xác Định

Tương tự như vậy, các kiểu con multipart không được xác định phải được xử lý như multipart/mixed. Điều này có nghĩa là máy khách hiển thị từng phần tuần tự. Ví dụ: multipart/report (được định nghĩa sau trong RFC 3462) vẫn sẽ hiển thị đúng trong các máy khách cũ hơn xử lý nó như hỗn hợp.

Hỗ Trợ Ký Tự Tối Thiểu

Các triển khai tuân thủ phải hỗ trợ ít nhất:

Trên thực tế, bất kỳ triển khai hiện đại nào phải hỗ trợ UTF-8. Không làm như vậy vào năm 2024 trở lên là một sai sót tuân thủ về tinh thần, ngay cả khi thông số năm 1996 không yêu cầu nó.

Ranh Giới MIME/Không MIME

Các thông điệp không có tiêu đề MIME-Version: 1.0 được coi là văn bản ASCII thuần túy trước MIME, bất kể liệu chúng có chứa các tiêu đề Content-Type hay không. Tiêu đề MIME-Version là người kiểm soát: nếu không có nó, xử lý MIME không được kích hoạt.

Những Sai Lầm Phổ Biến

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

Related RFCs