RFC 3464: Định dạng Thông báo Trạng thái Gửi
Tại Sao Tính Năng Này Tồn Tại
Trước khi định dạng DSN được tiêu chuẩn hóa, mỗi máy chủ thư tạo ra thông báo phản hồi ở định dạng văn bản tự do riêng của nó. Phân tích cú pháp các "thông báo phản hồi" này yêu cầu heuristics dễ vỡ — các biểu thức chính quy bị hỏng bất cứ khi nào một máy chủ thay đổi cách diễn đạt. RFC 3464 định nghĩa một kiểu nội dung MIME có thể đọc bằng máy (message/delivery-status) giúp xử lý phản hồi tự động trở nên đáng tin cậy.
RFC này hoạt động cùng với RFC 3461 (định nghĩa cách yêu cầu DSN ở cấp độ SMTP) và RFC 3462 (định nghĩa vùng chứa multipart/report bao bọc DSN).
Cách Hoạt Động
Một thông báo DSN là một thông báo MIME multipart/report với report-type=delivery-status. Nó chứa tối đa ba phần MIME:
-
Giải thích có thể đọc được bằng con người (
text/plain) — văn bản tự do cho con người. -
Trạng thái có thể đọc bằng máy (
message/delivery-status) — dữ liệu được cấu trúc được xác định bởi RFC này. -
Thông báo gốc (
message/rfc822hoặctext/rfc822-headers) — toàn bộ thông báo gốc hoặc chỉ tiêu đề của nó, tùy thuộc vào tham sốRETtừ RFC 3461.
Phần Nội Dung delivery-status
Phần message/delivery-status chứa các nhóm trường giống như tiêu đề được phân tách bằng các dòng trống:
; Các trường cho mỗi thông báo (một nhóm) Reporting-MTA: dns; mail.example.org Original-Envelope-Id: msg-20260311-0042 Arrival-Date: Wed, 11 Mar 2026 10:30:00 -0500 ; Các trường cho mỗi người nhận (một nhóm cho mỗi người nhận) Original-Recipient: rfc822;bob@example.org Final-Recipient: rfc822;bob@example.org Action: failed Status: 5.1.1 Diagnostic-Code: smtp; 550 5.1.1 User unknown Last-Attempt-Date: Wed, 11 Mar 2026 10:30:05 -0500
Chi Tiết Kỹ Thuật Chính
Trường Cho Mỗi Thông Báo
| Trường | Bắt Buộc | Mô Tả |
|---|---|---|
Reporting-MTA |
Có | MTA tạo ra DSN này, dưới dạng tên máy chủ DNS |
Original-Envelope-Id |
Không | ENVID từ giao dịch SMTP gốc (RFC 3461) |
DSN-Gateway |
Không | Có mặt khi DSN được dịch từ một hệ thống thư ngoại lại |
Received-From-MTA |
Không | MTA trao thông báo cho Reporting-MTA |
Arrival-Date |
Không | Khi thông báo gốc đến Reporting-MTA |
Trường Cho Mỗi Người Nhận
| Trường | Bắt Buộc | Mô Tả |
|---|---|---|
Final-Recipient |
Có | Địa chỉ người nhận mà MTA thực sự cố gắng gửi đến |
Original-Recipient |
Không | Giá trị ORCPT từ phiên SMTP — địa chỉ mà người gửi sử dụng |
Action |
Có | Một trong: failed, delayed, delivered, relayed, expanded
|
Status |
Có | Mã trạng thái nâng cao theo RFC 3463 (ví dụ: 5.1.1) |
Diagnostic-Code |
Không | Chuỗi lỗi thực tế từ máy chủ từ xa, được tiền tố theo loại (thường là smtp) |
Remote-MTA |
Không | MTA trả về lỗi |
Last-Attempt-Date |
Không | Khi lần cố gắng gửi cuối cùng được thực hiện |
Will-Retry-Until |
Không | Đối với các hành động delayed, khi MTA sẽ từ bỏ |
Giá Trị Hành Động
| Hành Động | Ý Nghĩa |
|---|---|
failed |
Lỗi vĩnh viễn — thông báo sẽ không được gửi (phản hồi cứng) |
delayed |
Lỗi tạm thời — vẫn đang thử lại (phản hồi mềm) |
delivered |
Gửi thành công đến hộp thư của người nhận |
relayed |
Chuyển tiếp đến một môi trường có thể không tạo thêm DSN |
expanded |
Gửi đến danh sách gửi thư hoặc bí danh mở rộng thành nhiều người nhận |
Ví Dụ Thông Báo DSN Đầy Đủ
From: mailer-daemon@mail.example.org To: alice@sender.example.com Subject: Delivery Status Notification (Failure) MIME-Version: 1.0 Content-Type: multipart/report; report-type=delivery-status; boundary="DSN-BOUNDARY-001" --DSN-BOUNDARY-001 Content-Type: text/plain Your message to bob@example.org could not be delivered. The recipient's mailbox does not exist. --DSN-BOUNDARY-001 Content-Type: message/delivery-status Reporting-MTA: dns; mail.example.org Original-Envelope-Id: msg-20260311-0042 Arrival-Date: Wed, 11 Mar 2026 10:30:00 -0500 Final-Recipient: rfc822;bob@example.org Action: failed Status: 5.1.1 Diagnostic-Code: smtp; 550 5.1.1 User unknown --DSN-BOUNDARY-001 Content-Type: text/rfc822-headers From: alice@sender.example.com To: bob@example.org Subject: Meeting tomorrow Message-ID: <abc123@sender.example.com> --DSN-BOUNDARY-001--
Lỗi Thường Gặp
-
Chỉ phân tích cú pháp phần có thể đọc được bằng con người. Phần
text/plaindành cho con người. Các hệ thống tự động sẽ phân tích cú pháp phầnmessage/delivery-status, có cấu trúc ổn định được xác định. -
Bỏ qua lớp mã Trạng thái. Chữ số đầu tiên rất quan trọng:
2.x.x= thành công,4.x.x= lỗi tạm thời (thử lại sau),5.x.x= lỗi vĩnh viễn (dừng thử lại). Coi tất cả các phản hồi như nhau gây hại danh tiếng của bạn. -
Không khớp Original-Envelope-Id. Nếu bạn đặt
ENVIDtrong RFC 3461, hãy sử dụngOriginal-Envelope-Idđể liên kết DSN trở lại các lần gửi cụ thể. Chỉ dựa vàoFinal-Recipientsẽ thất bại khi có sự chuyển tiếp hoặc chuyển hướng. -
Nhầm lẫn Final-Recipient với Original-Recipient. Sau khi chuyển tiếp,
Final-Recipientcó thể là một địa chỉ hoàn toàn khác. Luôn kiểm traOriginal-Recipientkhi có sẵn. -
Coi
relayedlàdelivered. Hành độngrelayedcó nghĩa là thông báo đã rời khỏi môi trường nhận biết DSN. Bạn có thể không bao giờ nhận được trạng thái cuối cùng.
Tác Động Khả Năng Gửi
-
Phân loại phản hồi tự động. Trường
Statusánh xạ tới các mã trạng thái nâng cao của RFC 3463. Mã5.1.1(người dùng không tồn tại) có nghĩa là loại bỏ địa chỉ;4.2.2(hộp thư đầy) có nghĩa là thử lại sau. Phân loại đúng là nền tảng của vệ sinh danh sách. -
Tương quan vòng lặp phản hồi.
Original-Envelope-Idcho phép bạn liên kết các phản hồi với các chiến dịch, lệnh gọi API hoặc giao dịch cụ thể — điều cần thiết để gỡ lỗi và phân tích. -
Xử lý phản hồi cứng so với mềm. Xem
Action: failedvới trạng thái 5.x.x là vĩnh viễn — loại bỏ địa chỉ. XemAction: delayedvới 4.x.x là tạm thời — thử lại với backoff nhưng loại bỏ sau các lần thất bại lặp lại. - Bảo vệ danh tiếng. Xử lý DSN kịp thời và loại bỏ các địa chỉ không hợp lệ giúp ngăn bạn liên tục nhắm vào các hộp thư bị chết, điều mà các nhà cung cấp hộp thư theo dõi như tín hiệu danh tiếng tiêu cực.