DSN:SMTP电子邮件的传递状态通知

了解DSN如何将传递状态引入SMTP电子邮件。

想知道您发送的电子邮件发生了什么?

即使只是对SMTP协议的简要介绍,您也会注意到除了通常的HELO之外,还有EHLO,这使得扩展 SMTP服务器在原始标准之外宣传其功能。 其中之一是DSN。 DSN? DNA和DDT不够?

为了争辩说电子邮件是不可靠的,有人应该“ ......更好地服务于他们的服务器;它吃掉了我的邮件...... ”并不罕见。 我自己做。 但是,没有太多理由支持这些怀疑。

自RFC 821(从1982年)开始实施交付系统。 只要SMTP协议的数据部分完成并且服务器已接受发送的电子邮件,它就会对此负责。 如果由于任何原因无法将其发送给收件人,则必须将其发送回原始发件人并通知该错误。 这导致了一些模糊的电子邮件

除此之外,这个老惯例意味着要么你得到了一个错误信息,要么你什么也得不到,在这种情况下你什么都不知道:邮件可能已经到达,或者它可能没有。 许多情况下的错误消息与没有错误消息一样有用。 随着电子邮件变得越来越重要,这不再令人满意(就像以前一样)。

DSN扩展到SMTP

RFC 1891提出了对SMTP协议的一些扩展,这应该导致更可靠和更可用的DSN系统。 它是MAIL和RCPT命令的一组扩展(如果这对你来说毫无意义,请阅读SMTP的工作方式 ,然后返回)。

没有EHLO,没有乐趣

首先,我们必须确保服务器支持DSN。 因此,我们必须向他说EHLO并仔细聆听。 如果它在功能列表中以某种方式响应DSN,我们可以假定它能够服务于我们的请求。 如果不是,那么不是:我们可以尝试另一台服务器,或者直接退回到没有DSN的电子邮件 。 例如(我的输入是蓝色的,服务器的输出是黑色的):

220 larose.magnet.at ESMTP Sendmail 8.8.6 / 8.8.6; Sun,1997年8月24日18:23:22 +0200
EHLO本地主机
250-larose.magnet.at Hello localhost [127.0.0.1],很高兴认识你
250 EXPN
250动词
250-8BITMIME
250-SIZE
250-DSN
250 ONEX
250-ETRN
250 XUSR
250帮助

幸运的是,我们还发现了DSN。

DSN发件人扩展

下一个命令通常是MAIL FROM :. 有了DSN,这也不例外。 但是您可能会发出两个其他选项:RET和ENVID。

RET选项相当随意放置在MAIL命令中,但它适用于此处以及其他任何地方。 目的是指定在发送失败的情况下应该返回多少原始消息。 有效的参数是FULL和HDRS。 前者意味着完整的消息应包含在错误消息中,HDRS指示服务器仅返回失败邮件的标题。 如果没有指定RET,则由服务器决定做什么。 在大多数情况下,HDRS将成为默认值。

ENVID确实属于发件人,因为她或(而不是)她的电子邮件客户端将成为唯一使我们获得此信封标识符的人 。 其目的是告诉发件人可能发出的错误信息与哪个电子邮件相对应。 这个ID的格式基本上留给了发件人的想象。 我们不会在我们的例子中使用ENVID(想象!):

MAIL FROM:sender@example.com RET = HDRS
250 sender@example.com ...发件人确定

显然,我们只想把头部放回到我们的DSN中。

DSN收件人扩展

RCPT TO:获得扩展的公平份额:NOTIFY和ORCPT。

NOTIFY是DSN的真正核心。 它告诉服务器何时发送传送状态通知。 第一个可能的值是从不意味着在任何情况下都不得将DSN返回给发件人。 没有DSN,这是不可能的。 然后是SUCCESS,当你的邮件在目的地安排时,它会通知你。 FAILURE是SUCCESS的对手(!):如果在交付过程中发生了恐慌,DSN将到达。 最后一个选项是DELAY:如果交货时间延迟,您将收到通知,但实际交付的结果(成功或失败)尚未确定。 如果指定了它,它绝不是唯一的参数,其他三个可能出现在列表中,用逗号分隔。 成功和失败弥补了一个非常强大的团队(!),告诉你(几乎)任何情况下你的邮件发生了什么事情。

ORCPT的目的是保存电子邮件的原始收件人,例如,如果它被转发到另一个地址。 此选项的参数是原始收件人的电子邮件地址以及地址类型。 地址类型首先是分号,最后是地址。 例如:

RCPT TO:support@example.com NOTIFY = FAILURE,DELAY ORCPT = rfc822; support@example.com
250 support@example.com ...收件人确定(将排队)

接下来是DATA,因为我们知道它,并最终希望通过发送状态通知来通知您成功。

DSN是否有效?

当然,只有从发件人到收件人的邮件运输代理支持DSN,所有这些美丽和智慧才会起作用。 有一天他们会。