[ 标头和传送错误 ]

交付状态通知:追踪原始故障和报告系统

读取特定于收件人的 DSN 字段,以将报告中继与实际导致传递失败的系统和事件区分开来。

由EmailAuth研究团队提供 · 4 分钟阅读

[ 要点 ]

  • 读取特定于收件人的 DSN 字段,以将报告中继与实际导致传递失败的系统和事件区分开来。
  • 一起读取每个接收者的操作、状态和诊断代码;报告系统可以保留不同系统先前的拒绝。
在此页面上

送达通知通常包含多个服务器名称、日期和地址。发送报告的系统不一定是拒绝消息的系统。在根据报告的主题行进行DNS或邮箱更改之前,解析其传递状态字段并关联原始尝试。

识别报告和远程系统

RFC 3464定义了传递状态主体格式。报告-MTA 标识生成通知的系统。远程 MTA(如果存在)可识别与报告的传送尝试关联的远程系统。诊断代码可以保留远程协议响应。人类可读的解释是有帮助的,但它的散文不应取代结构化字段。 RFC 3464第 2.2 和 2.3 节.

记录系统标识和报告时间。从应用程序接受邮件的中继稍后可能会收到来自收件人服务器的拒绝并自行构建 DSN。将中继名称视为拒绝目标可能会将调查发送给错误的管理员并掩盖原始SMTP响应。

独立读取每个接收者块

最终收件人标识应用传递状态块的收件人。原始接收者(当存在时)可以保留较早的接收者身份。操作描述了交付操作,例如失败或延迟。状态带有增强的状态代码。可选的 Diagnostic-Code、Last-Attempt-Date 和 Will-Retry-Until 可以提供有用的附加上下文,但并非每个报告都提供它们。

当诊断代码存在时, RFC 3464第 2.3.6 节将提供的远程 MTA 解释为其发行者;如果没有 Remote-MTA,诊断将归因于 Reporting-MTA。该字段规则并不能证明更早的远程尝试从未发生过。使用可信日志证实完整的历史记录。

DSN 可以包含多个具有不同操作和状态值的接收者块。不要对原始“收件人”或“抄送”标头中的每个人都应用一次失败。同样,缺少可选字段并不能证明相应的事件从未发生过。将缺勤保留为未知,并使用队列或跟踪证据来填补空白。

阅读假设到期通知

想象一下, relay.example接受一条消息,然后在尝试传递时从mx.example收到 452 4.2.2 Mailbox full。在其配置的传递生命周期到期后,中继会生成 DSN。教学摘录可以识别报告-MTA:dns; relay.example ,远程 MTA:dns; mx.example ,最终收件人:rfc822; recipient@example.test ,操作:失败,状态:5.4.7 和诊断代码:smtp; 452 4.2.2 邮箱已满。

这是发明的现场演练,而不是完整的MIME报告或执行的邮件交换。最终状态描述了交付时间到期,而保留的诊断描述了最后一次容量拒绝。这些字段回答不同的问题。这不是通用的首选映射: RFC 3463第 3.5 节表示在可能的情况下返回实际的交付问题代码而不是过期代码。保留最具体的支持原因。 RFC 3464还允许 Action: failed with a 4.xx Status after the reporting MTA 已放弃尝试;暂时原因并不意味着原始原因仍处于排队状态。

对于您自己的报告,请分别关联原始提交、尝试、到期决定和报告到达。请勿假设说明性名称、时间或字段与提供商匹配。保留缺失的可选字段而不用猜测值填充它们。

行动前关联

将通知与原始信封收件人、提交时间和可用队列标识符进行匹配。 Original-Envelope-Id 可以在存在时帮助关联;返回的 Message-ID 是另一个线索,而不是对通知本身的充分验证。报告可能是欺骗性的或由伪造造成的 返回路径 地址,因此意外退回邮件不得自动触发发件人配置更改。

使用受信任的发送日志来确定组织确实提交了消息。避免仅仅因为邮件类似于退回邮件而打开返回的附件或遵循凭据提示。如果不存在匹配的提交,请调查该报告是否可能是未经请求的或伪造的,而不是将其视为帐户泄露的证据。

将校正分配给右侧图层

寻址状态将发送至邮箱或联系人所有者。路线或连接问题需要传输证据。身份验证诊断需要实际的相关消息身份和接收评估。保留完整的诊断信息,以便专家可以区分类似的故障。

经批准的更正后,将任何新尝试与其自己的队列和消息标识符相关联。不要用后来的结果覆盖历史报告。将原始故障、维修和更换交付视为相关但不同的事件。当成功重新发送后延迟的报告到达时,这可以保留诚实的时间表。

准备特定于收件人的升级

  • 关联:使用收件人、时间和队列证据将报告与合法提交的内容进行匹配。
  • 颁发者:将报告 MTA 与远程 MTA 和诊断颁发者分开保留。
  • 结果:保留操作、状态和原始诊断代码,而不强制它们匹配。
  • 所有者:分配实际的失败层,而不仅仅是退回的发送者。
  • 隐私:仅提供必要的报告字段;不转发无关的返回消息内容。

[ 外卖 ]

读取特定于收件人的 DSN 字段,以将报告中继与实际导致传递失败的系统和事件区分开来。

[ 按角色 ]

这对您意味着什么

选择您的角色以执行后续实际步骤。

IT/邮件管理员

解析接收者块

结构化字段保留了主题省略的区别。

后续步骤

  1. 比较报告 MTA 和远程 MTA。
  2. 保留操作状态和诊断代码。
  3. 与可信队列记录关联。

CISO / SecOps

谨慎对待突发报告

退回邮件不会自动成为经过验证的事件报告。

后续步骤

  1. 检查是否有匹配的提交。
  2. 避免不受信任的附件执行。
  3. 限制返回消息内容的泄露。

创始人/非技术人员

查找失败事件的所有者

通知的发送者可能不知道根本问题。

后续步骤

  1. 确定受影响的收件人。
  2. 按故障层分配修正。
  3. 将原始结果和替换结果分开。

[ 常见问题解答 ]

常见问题

Reporting-MTA 是否始终是拒绝服务器?

否。它标识生成报告的系统,该报告可能引用远程故障。

什么可以识别受影响的收件人?

每个特定于收件人的传递状态块中的最终收件人字段。

一个 DSN 可以包含不同的收件人结果吗?

是的。读取每个块,而不是将一种状态应用于每个可见的收件人。

丢失的 Remote-MTA 是否证明没有远程尝试?

不可以。如果没有远程 MTA, RFC 3464会将提供的诊断代码归因于报告 MTA;这并不能确定早期尝试的全部历史。检查可信日志。

样本是捕获的提供商跳出吗?

不。这是一个明确假设的现场演练,而不是提供商报告、生成的文件或执行的SMTP交换。

为什么示例将状态 5.4.7 和诊断 452 4.2.2 结合在一起?

假设的最终状态描述队列到期,而诊断保留最后的容量拒绝;如果可能的话, RFC 3463更喜欢实际的问题代码而不是过期代码。当报告 MTA 停止尝试时,“操作:失败”也可能伴随 4.xx 状态。

反弹本身可以伪造吗?

是的。与受信任的发送日志相关联,并且不遵循意外的凭据请求。

重发成功后应该保留什么?

原始失败、批准的更正和新尝试的单独标识符和结果。

[ 来源 ]

来源

  1. RFC 3464用于传递状态通知的可扩展消息格式

    部分 §2.2 · §2.3 · §2.3.3 · §2.3.6 · §4

  2. RFC 3463增强型邮件系统状态代码

    部分 §3.2 · §3.3 · §3.4 · §3.5

  3. RFC 5321 SMTP

    部分 §3.3 · §4.1.1.1 · §4.2 · §4.5.3.2 · §4.5.4.1 · §5 · §6.1

[ 词汇表 ]

词汇表

报告-MTA
邮件传输代理生成递送状态通知。
远程MTA
提供时与报告的传递尝试关联的远程邮件传输代理。
DSN 收件人块
描述一位收件人的递送状态的结构化字段。

企业出处

为什么顶级金融机构和政府 退役了他们的电子邮件安全仪表板。

传统的电子邮件身份验证平台会向您出售仪表板并要求您的工程师来完成这项工作。在高风险环境中,手动监督意味着延迟执行、配置漂移和不受监控的影子域。

EmailAuth是代理电子邮件来源平台。 我们的代理人强制执行 p=reject,保持第三方发件人一致并将您的域名移至完整状态 RFC 9989 合规性、新的DMARC标准,以及人机交互审核能力。

政府 大型企业 一级金融机构

SaaS · 专用租赁 · 气隙本地部署 · BYOK 加密

知识库