RFC 3461: Phần mở rộng Thông báo Trạng thái Gửi SMTP
Tại sao tính năng này tồn tại
SMTP cơ bản (RFC 5321) chỉ đảm bảo bạn sẽ được thông báo về các lỗi — máy chủ nhận sẽ tạo một thông báo bounce nếu giao hàng cuối cùng không thành công. Nhưng những người gửi thường cần nhiều hơn:
- Xác nhận tích cực rằng tin nhắn đã được giao đến hộp thư của người nhận
- Thông báo về độ trễ khi tin nhắn bị mắc kẹt trong hàng đợi
- Báo cáo có chọn lọc — chỉ thông báo khi gặp lỗi, hoặc chỉ khi thành công
- Theo dõi ở cấp phong bì bằng cách sử dụng một mã định danh mờ mà người gửi có thể liên kết lại với lần gửi ban đầu
Nếu không có phần mở rộng này, những người gửi sẽ mù mờ: sự im lặng có thể có nghĩa là giao hàng thành công hoặc một tin nhắn bị mất. RFC 3461 thêm các tham số SMTP cho phép MTA gốc yêu cầu một cách rõ ràng các thông báo trạng thái giao hàng (DSN) và kiểm soát nội dung của chúng.
Cách hoạt động
Phần mở rộng DSN được thương lượng trong quá trình bắt tay EHLO của SMTP. Khi máy chủ nhận quảng cáo DSN, người gửi có thể sử dụng hai bộ tham số mới:
Tham số MAIL FROM
-
RET=FULLhoặcRET=HDRS— kiểm soát xem thông báo DSN có bao gồm toàn bộ phần thân tin nhắn gốc hay chỉ các tiêu đề.HDRSđược khuyến nghị cho các tin nhắn lớn. -
ENVID=value— một mã định danh phong bì (tối đa 100 ký tự được mã hóa xtext) sẽ được trả về trong bất kỳ DSN nào, cho phép người gửi liên kết thông báo với tin nhắn gốc.
Tham số RCPT TO
-
NOTIFY=conditions— một danh sách được phân tách bằng dấu phẩy gồm:SUCCESS,FAILURE,DELAY, hoặc giá trị đặc biệtNEVER. Điều này kiểm soát khi nào DSN được tạo. -
ORCPT=type;address— địa chỉ người nhận gốc (trước khi mở rộng bí danh hoặc chuyển tiếp), để DSN có thể báo cáo địa chỉ mà người gửi thực sự dự định.
Ví dụ Phiên SMTP
EHLO sender.example.com 250-mail.example.org Hello 250-SIZE 52428800 250-DSN 250 STARTTLS ; Yêu cầu DSN với ID phong bì, chỉ trả về các tiêu đề khi bị bounce MAIL FROM:<alice@sender.example.com> RET=HDRS ENVID=msg-20260311-0042 250 OK ; Thông báo khi thành công hoặc thất bại, bảo toàn người nhận gốc RCPT TO:<bob@example.org> NOTIFY=SUCCESS,FAILURE ORCPT=rfc822;bob@example.org 250 Accepted ; Không gửi DSN cho người nhận này RCPT TO:<bcc-copy@archive.example.com> NOTIFY=NEVER 250 Accepted DATA 354 Start mail input [message content] . 250 OK
Chi tiết kỹ thuật chính
Giá trị NOTIFY
| Giá trị | DSN được tạo khi |
|---|---|
SUCCESS |
Tin nhắn được giao thành công đến hộp thư của người nhận |
FAILURE |
Giao hàng thất bại vĩnh viễn (bounce cứng) |
DELAY |
Giao hàng bị trễ nhưng vẫn đang được thử lại |
NEVER |
Không có DSN trong bất kỳ trường hợp nào (không thể kết hợp với các giá trị khác) |
Nếu NOTIFY bị bỏ qua, hành vi mặc định tương đương với NOTIFY=FAILURE — bạn chỉ nhận được thông báo khi gặp lỗi vĩnh viễn.
Mã hóa ENVID
Giá trị ENVID sử dụng mã hóa xtext: các ký tự ASCII có thể in được được chuyển qua không thay đổi, nhưng + và = (và các ký tự ngoài phạm vi ASCII có thể in được) được mã hóa thành +XX trong đó XX là giá trị hex. Điều này giữ cho tham số an toàn cho vận chuyển SMTP.
Hành vi Relay
Các MTA trung gian hỗ trợ DSN phải truyền các tham số DSN khi chuyển tiếp. Nếu một MTA trung gian không hỗ trợ DSN, nó vẫn phải tạo các thông báo bounce thích hợp theo các quy tắc SMTP tiêu chuẩn, mặc dù các điều khiển DSN chi tiết sẽ bị mất.
Những sai lầm phổ biến
-
Kết hợp NEVER với các giá trị khác.
NOTIFY=NEVER,FAILURElà không hợp lệ.NEVERphải xuất hiện riêng lẻ. -
Sử dụng tham số DSN mà không kiểm tra EHLO. Nếu máy chủ không quảng cáo
DSN, bao gồm các tham số này sẽ gây ra lỗi cú pháp (mã 501). - Kỳ vọng DSN từ tất cả các máy chủ. Hỗ trợ DSN là tùy chọn. Nhiều nhà cung cấp hộp thư lớn không quảng cáo nó, có nghĩa là bạn không thể bắt Gmail hoặc Outlook gửi cho bạn thông báo thành công.
- Sử dụng RET=FULL cho các tin nhắn lớn. Điều này làm cho toàn bộ tin nhắn gốc (bao gồm tệp đính kèm) được bao gồm trong DSN, có thể hit giới hạn kích thước hoặc lãng phí băng thông.
- Quên ORCPT trong quá trình chuyển tiếp. Nếu máy chủ của bạn mở rộng bí danh hoặc chuyển tiếp thư, bỏ qua ORCPT có nghĩa là DSN sẽ báo cáo địa chỉ cuối cùng, không phải địa chỉ mà người gửi sử dụng.
Tác động đến Khả năng giao hàng
Hỗ trợ DSN là cơ sở hạ tầng quan trọng cho việc gửi email chuyên nghiệp:
-
Xử lý bounce. Xử lý bounce theo chương trình phụ thuộc vào DSN để xác định người nhận nào bị lỗi và lý do. Tham số
ENVIDcho phép bạn liên kết bounce trở lại các chiến dịch hoặc giao dịch cụ thể. -
Vệ sinh danh sách.
NOTIFY=FAILURE(mặc định) đảm bảo bạn tìm hiểu về các địa chỉ không hợp lệ. Xóa nhanh chóng các địa chỉ bounce bảo vệ danh tiếng người gửi của bạn. -
Loại bỏ lưu lượng không cần thiết. Sử dụng
NOTIFY=NEVERcho các bản sao BCC hoặc địa chỉ lưu trữ nơi bạn không cần xác nhận giao hàng. -
Nhận thức về độ trễ.
NOTIFY=DELAYcảnh báo bạn về các vấn đề giao hàng trước khi chúng trở thành lỗi vĩnh viễn, cho bạn thời gian để điều tra.