← RFC Reference

RFC 3461: SMTP投递状态通知扩展

Current Standard Delivery Status & Bounce Handling Obsoletes RFC 1891 Published March 2026
ELI5: 当您通过邮政服务发送挂号信时,可以请求回执。RFC 3461 是电子邮件的等价物——它允许发送服务器通过在 SMTP 对话中添加特殊参数来说"告诉我这条消息是否已送达、退回或延迟"。

为什么存在这个扩展

基本SMTP(RFC 5321)只能保证你会收到失败通知——如果最终投递失败,接收服务器会生成一条退信。但发件人经常需要更多功能:

没有这个扩展,发件人是盲目的:无回应可能意味着成功投递或消息丢失。RFC 3461添加了SMTP参数,让源MTA明确请求投递状态通知(DSN)并控制其内容。

工作原理

DSN扩展在SMTP EHLO握手期间协商。当接收服务器公告DSN时,发件人可以使用两组新参数:

MAIL FROM参数

RCPT TO参数

SMTP会话示例

EHLO sender.example.com
250-mail.example.org Hello
250-SIZE 52428800
250-DSN
250 STARTTLS

; 带信封ID请求DSN,退信时仅返回标头
MAIL FROM:<alice@sender.example.com> RET=HDRS ENVID=msg-20260311-0042
250 OK

; 在成功或失败时通知,保留原始收件人
RCPT TO:<bob@example.org> NOTIFY=SUCCESS,FAILURE ORCPT=rfc822;bob@example.org
250 Accepted

; 禁止此收件人的所有DSN
RCPT TO:<bcc-copy@archive.example.com> NOTIFY=NEVER
250 Accepted

DATA
354 Start mail input
[message content]
.
250 OK

关键技术细节

NOTIFY值

值 何时生成DSN
SUCCESS 消息成功投递到收件人的邮箱
FAILURE 投递永久失败(硬退信)
DELAY 投递延迟但仍在重试
NEVER 在任何情况下都不生成DSN(不能与其他值组合)

如果省略NOTIFY,默认行为等同于NOTIFY=FAILURE——你只会在永久失败时收到通知。

ENVID编码

ENVID值使用xtext编码:可打印ASCII字符保持不变,但+和=(以及可打印ASCII范围之外的字符)编码为+XX,其中XX是十六进制值。这使参数对SMTP传输安全。

中继行为

支持DSN的中间MTA在中继时必须传播DSN参数。如果中间MTA不支持DSN,它必须仍根据标准SMTP规则生成适当的退信消息,尽管细粒度的DSN控制将丢失。

常见错误

可投递性影响

DSN支持是专业邮件发送的关键基础设施:

Related RFCs