← RFC Reference

RFC 5321 – Giao thức truyền thư đơn giản

Current Standard Core SMTP & Message Format Obsoletes RFC 2821 Published March 2026
ELI5: SMTP là dịch vụ bưu chính của Internet. Khi bạn gửi một email, máy chủ thư của bạn mở một cuộc hội thoại với máy chủ thư của người nhận, giới thiệu chính nó, nói rõ ai là người gửi thư và ai là người nhận, sau đó giao bức thư. Máy chủ nhận hoặc chấp nhận nó, nói "hãy thử lại sau," hoặc từ chối hoàn toàn. Mọi email bạn từng gửi đã đi qua SMTP.

Tại Sao RFC Này Tồn Tại

SMTP là giao thức lâu đời nhất và cơ bản nhất cung cấp năng lượng cho email. Dòng dõi của nó kéo dài trở lại RFC 821, được xuất bản năm 1982 bởi Jon Postel. RFC 5321, xuất bản năm 2008, là đặc tả định nghĩa hiện tại. Nó hợp nhất hàng thập kỷ mở rộng, làm rõ và kinh nghiệm hoạt động thành một tài liệu có thẩm quyền duy nhất.

Sự phát triển chính từ RFC 821 đến 5321 bao gồm: chính thức hóa ESMTP (Extended SMTP), làm rõ hành vi chuyển tiếp so với gửi, yêu cầu nghiêm ngặt hơn xung quanh tra cứu MX DNS, quy tắc cập nhật cho chữ địa chỉ và IPv6, và yêu cầu xử lý phản hồi. RFC này là nền tảng mà mọi RFC email khác được xây dựng dựa vào.

Nó Hoạt Động Như Thế Nào

Một giao dịch SMTP là một cuộc hội thoại có cấu trúc giữa hai máy chủ trên kết nối TCP (thường là cổng 25). Giao thức dựa trên văn bản và hướng dòng — mọi lệnh và phản hồi đều là ASCII có thể đọc được của con người.

Mô Hình SMTP

SMTP định nghĩa ba vai trò:

Máy khách kết nối, xác định chính nó bằng EHLO, chỉ định người gửi envelope (MAIL FROM), một hoặc nhiều người nhận (RCPT TO), rồi truyền dữ liệu thông báo (DATA). Máy chủ phản hồi mỗi lệnh bằng mã trạng thái ba chữ số.

Các Lệnh SMTP

Lệnh Mục Đích
EHLO Xác định máy khách và yêu cầu các tính năng mở rộng. Thay thế HELO cũ hơn.
MAIL FROM:<addr> Chỉ định người gửi envelope (return-path cho các phản hồi).
RCPT TO:<addr> Chỉ định một người nhận. Được phát hành một lần cho mỗi người nhận.
DATA Bắt đầu truyền nội dung thông báo. Kết thúc bằng một . đơn lẻ trên một dòng.
RSET Hủy bỏ giao dịch hiện tại và đặt lại trạng thái.
VRFY Xác minh người dùng tồn tại (hiếm khi được hỗ trợ do lạm dụng).
EXPN Mở rộng danh sách gửi thư (hiếm khi được hỗ trợ).
NOOP Không có thao tác; giữ kết nối sống.
QUIT Đóng kết nối.

Mã Phản Hồi

Mọi phản hồi máy chủ bắt đầu bằng một mã ba chữ số. Chữ số đầu tiên cho máy khách biết điều gì đã xảy ra:

Chữ số thứ hai hạn chế danh mục: x0x = cú pháp, x1x = thông tin, x2x = kết nối, x5x = hệ thống thư. RFC 3463 mở rộng thêm các mã trạng thái được cải thiện như 5.1.1 (hộp thư đích xấu).

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

Envelope Vs. Headers

Một sự phân biệt quan trọng trong SMTP là giữa envelopemessage headers. Envelope (MAIL FROMRCPT TO) kiểm soát định tuyến — nó cho máy chủ biết nơi cần gửi thông báo. Message headers (From:, To:, Subject:) là một phần của thân thông báo được truyền trong DATA và là những gì người nhận thấy. Những cái này có thể khác nhau, và hợp pháp trong các trường hợp như danh sách gửi thư, BCC và chuyển tiếp.

Quá Trình Tra Cứu MX

Khi máy khách cần gửi đến user@example.com, nó truy vấn DNS để tìm MX records cho example.com. Quá trình được định nghĩa bởi RFC 5321:

  1. Tra cứu MX records cho tên miền. Sắp xếp theo ưu tiên (số thấp hơn = ưu tiên cao hơn).
  2. Nếu không có MX records, quay lại A hoặc AAAA record cho chính tên miền.
  3. Nếu MX record chỉ đến . (một "null MX" theo RFC 7505), tên miền không chấp nhận thư.
  4. Thử từng host MX theo thứ tự ưu tiên. Nếu máy chủ trả về lỗi 4xx, thử host tiếp theo.

Độ Dài Dòng và Tính Minh Bạch Dữ Liệu

SMTP yêu cầu các dòng trong thông báo không dài hơn 998 ký tự (không bao gồm CRLF), với giới hạn khuyến nghị là 78 ký tự. Dấu hiệu kết thúc dữ liệu là một dòng chứa chỉ một dấu chấm (.). Nếu một dòng trong thân thông báo bắt đầu bằng một dấu chấm, máy khách phải "dot-stuff" nó bằng cách thêm một dấu chấm bổ sung vào phía trước, và máy chủ phải loại bỏ nó.

Timeout

RFC 5321 chỉ định các timeout tối thiểu mà máy khách PHẢI tuân thủ:

Những timeout rộng rãi này tồn tại vì các máy chủ nhận có thể thực hiện các kiểm tra tốn kém (lọc spam, quét virus) trước khi phản hồi dấu chấm cuối cùng.

Ví Dụ SMTP

Một giao dịch SMTP hoàn chỉnh để gửi một thông báo:

# Máy khách kết nối với cổng 25 của MX server của người nhận S: 220 mx.example.com ESMTP ready C: EHLO sender.example.net S: 250-mx.example.com Hello sender.example.net S: 250-SIZE 52428800 S: 250-8BITMIME S: 250-STARTTLS S: 250-ENHANCEDSTATUSCODES S: 250 PIPELINING # Người gửi envelope (return-path cho các phản hồi) C: MAIL FROM:<alice@sender.example.net> S: 250 2.1.0 OK # Người nhận envelope C: RCPT TO:<bob@example.com> S: 250 2.1.5 OK # Bắt đầu truyền dữ liệu thông báo C: DATA S: 354 Start mail input; end with <CRLF>.<CRLF> C: From: Alice <alice@sender.example.net> C: To: Bob <bob@example.com> C: Subject: Meeting tomorrow C: Date: Wed, 11 Mar 2026 10:00:00 -0500 C: Message-ID: <abc123@sender.example.net> C: C: Hi Bob, are we still on for tomorrow? C: . S: 250 2.0.0 OK, message accepted for delivery C: QUIT S: 221 2.0.0 mx.example.com closing connection

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

Tác Động Khả Năng Giao Hàng

Tuân thủ RFC 5321 trực tiếp ảnh hưởng đến việc email của bạn có đạt đến hộp thư đến hay không:

Related RFCs