DSN: SMTP邮件的发送状态通知

电子邮件中的深空网络是什么?

交付状态通知(DSN)从那时起就存在了RFC 821(1982)。一旦数据部分SMTP协议完成后,服务器接收发送的电子邮件,DSN对此负责。如果由于任何原因,电子邮件无法送达收件人,DSN必须将其发送回原始发件人,并通知错误。

这个旧的约定要么意味着您收到了一条错误消息,要么意味着您什么也没有收到。邮件可能已经到了,也可能还没有到。在许多情况下,错误消息和没有错误消息一样有用。

DSN扩展SMTP

RFC 1891对SMTP协议提出了一些扩展,这些扩展应该会导致更可靠和更可用的DSN系统。它是一组MAIL和RCPT命令的扩展。

没有EHLO,就没有乐趣

首先,确保服务器支持dns—也就是说,对它说EHLO并仔细听。如果它在特性列表的某个地方使用DSN进行响应,它将能够为请求提供服务。如果没有,尝试另一个服务器或退回到没有DSN的电子邮件。例如:

220 larose.magnet.at ESMTP Sendmail 8.8.6/8.8.6;星期日,1997年8月24日18:23:22 +0200
EHLO localhost
250 - larose.magnet。在Hello localhost[127.0.0.1],很高兴认识你
250 - expn
250 -动词
250 - 8 bitmime
250 -大小
250 - dsn
250 -奥奈克斯
250 - etrn
250 - xusr
250年帮助

DSN发送方扩展

下一个命令通常是MAIL FROM。对于深空网络,这也没有什么不同。但是您可以使用另外两个选项:RET和ENVID。

RET选项被任意地放置在MAIL命令中,但是它适用于这里和其他任何地方。目的是指定在传递失败的情况下应该返回多少原始消息。有效参数是FULL和HDRS。FULL意味着应该在错误消息中包含完整的消息,HDRS指示服务器只返回失败邮件的头。如果未指定RET,则由服务器决定如何操作。在大多数情况下,HDRS是默认值。

ENVID属于发送方,因为发送方或(更确切地说)发送方的电子邮件客户端将是唯一使用这个信封标识符的人。它的目的是告诉发送者可能发出的错误消息对应于哪个电子邮件。这个ID的格式留给发送方自己去考虑。在这个例子中不使用ENVID:

邮件来自:sender@example.com RET=HDRS
250 sender@example.com…发送好了

DSN接受者扩展

RCPT也得到了公平的扩展:NOTIFY和ORCPT。NOTIFY是深空网络的核心。它告诉服务器何时发送发送状态通知。选项包括:

  • 决不意味着在任何情况下都不能将DSN归还给发送方。没有深空网络,这是不可能的。
  • 当邮件到达目的地时,SUCCESS会发出通知。
  • 如果在交付过程中出现错误,FAILURE将交付DSN。
  • 如果在交付中出现了不寻常的延迟,DELAY将发送一个通知,但是实际交付的结果(成功或失败)尚未确定。

NEVER必须是指定的唯一参数。其他三个可以出现在一个列表中,用逗号分隔。

ORCPT的目的是保存电子邮件的原始收件人,例如,如果电子邮件被转发到另一个地址。该选项的参数是原始收件人的电子邮件地址和地址类型。地址类型在前面,后面是分号,最后是地址。例如:

RCPT TO: support@example.com NOTIFY=FAILURE,DELAY ORCPT=rfc822;support@example.com
250 support@example.com…接收者ok(将排队)

接下来是DATA和一个成功的交付状态通知。

DSN工作吗?

只有发件人到收件人的邮件传输代理支持DSN时,DSN才有效。

这个页面有用吗?