[ 标头和传送错误 ]

通过完整的邮件传递事务解释SMTP

按阶段和收件人读取SMTP对话,保留转移消息责任的响应。

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

[ 要点 ]

  • 根据命令、对等点和阶段解释每个SMTP响应。
在此页面上

SMTP是一个对话,而不是一个发送按钮。客户端打开连接、标识自身、提供信封、传输消息内容并读取服务器的响应。每个响应都属于特定的命令和服务器。了解这一顺序可以解释为什么一个收件人失败而另一个收件人被接受,以及为什么最初的成功并不能证明最终的交付。

从联系和问候开始

服务器发送问候语,通常以 220 开头。客户端使用 EHLO 识别自己的身份并请求扩展信息; HELO提供较旧的基本问候语形式。多行EHLO回复在最后一行之前使用连续行。成功后 STARTTLS 握手, RFC 3207要求双方丢弃在TLS之前学到的SMTP知识;客户端应首先发送EHLO以发现受保护会话的功能。不要重复使用早期的扩展列表。

协议顺序和回复规则定义为 RFC 5321。身份验证、 TLS和提交策略是额外的问题,但不能证明可见的发件人地址已自动授权。记录对等点、时间和协商功能,无需保留密码或可重复使用的身份验证令牌。

将信封分开放置

邮件来自 提供用于传输处理和故障的反向路径。 RCPT TO 为当前交易提供接收者。这两个命令都不是消息内可见的 From 或 To 标头。一个事务可以包含多个 RCPT 命令,服务器可以接受一些命令,同时拒绝其他命令。

考虑这个合成序列,而不是捕获的交换。 MAIL FROM 收到 250。missing@receiver.test missing@receiver.test RCPT TO 收到 550 5.1.1, accepted@receiver.test的 RCPT TO 收到 250。接受的收件人仍然有资格进行后续的数据传输;该服务器尚未接受被拒绝的收件人。这些虚构的地址和回复并不描述公共服务。

传输消息并阅读最终回复

在至少一个接收者被接受后,DATA 请求内容传输。 354 响应邀请客户端发送标头和正文,并以所需的点行结尾。点透明度可防止以点开头的内容行被误认为终止符。例如,以 .example 开头的内容行会以额外的前导点作为 ..example 进行传输;接收SMTP层删除添加的点。仅由终止点组成的线具有不同的作用。

决定性的消息接受响应出现在内容之后,而不是在 354 处。在合成序列中,假设服务器在终止点之后返回 250,并带有服务器本地队列标识符。真正的接受SMTP服务器承担RFC 5321中所描述的责任,但接受仍然不能保证收件箱放置、阅读或稍后下游跃点的成功。如果连接在最终回复之前消失,客户端可能不知道是否已接受;在调查重试时考虑可能的重复投递。

在上下文中解释失败

4xx 回复是暂时的否定完成; 5xx 回复是对该请求的永久否定完成。保留完整回复和任何增强代码,因为裸露的 550 无法识别 DMARC 作为原因。重试行为还取决于队列策略和消息的有用性。无限期地重复无效的收件人并不能修复它。

如果 AUTH 不受支持或被拒绝,请将其记录为单独的命令结果。它本身并不描述接收者有效性、最终数据接受或下游域身份验证结果。对于真正的调查,请将记录与发件人队列日志、收件人跟踪和适用的策略相关联,并标记缺少证据的任何阶段。本指南的示例是假设的;没有为他们执行登录、套接字交换或邮件传递。

建立命令和结果分类账

  • 连接:记录实际的对方、时间和问候语。
  • 功能:在任何TLS协商之前和之后分别保存EHLO结果。
  • 信封:单独保留 MAIL FROM 和每个 RCPT TO 结果。
  • 内容:区分354邀请和终止点后的最终回复。
  • 不确定性:如果最终答复丢失,则将接受标记为未知,并在声明失败之前检查接收器/队列证据。
  • 关闭:记录最终消息处理和未解决的下游阶段,而不记录凭据。

[ 外卖 ]

按阶段和收件人读取SMTP对话,保留转移消息责任的响应。

[ 按角色 ]

这对您意味着什么

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

IT/邮件管理员

保留交易

命令和响应对定位故障。

后续步骤

  1. 记录每个 RCPT 结果。
  2. 捕获最终的数据回复。
  3. 关联队列标识符。

CISO / SecOps

确保诊断安全

有用的协议证据不需要秘密。

后续步骤

  1. 排除凭证和令牌。
  2. 使用无害的测试内容。
  3. 检查重试和重复风险。

创始人/非技术人员

定义交付证据

发送通知不是端到端结果。

后续步骤

  1. 命名所需的交付阶段。
  2. 及时升级收件人故障。
  3. 避免仅仅通过接受来承诺收件箱放置。

[ 常见问题解答 ]

常见问题

354是否意味着消息已被接受?

不。它会邀请内容传输; DATA后的最终响应携带接受结果。

一笔SMTP事务可以有混合的收件人结果吗?

是的。每个 RCPT 命令都会收到自己的响应。

MAIL FROM 是可见的 From 标头吗?

不。它是一个信封命令,与消息内容分开。

为什么以点为前缀的内容行会带有额外的点?

SMTP数据透明度会在以点为前缀的内容行之前添加一个点,并在收到时将其删除,从而使内容与终止点行区分开来。

250能保证收件箱吗?

不。它在特定服务器和阶段建立接受。

如果最终响应丢失怎么办?

发件人可能不知道是否已接受,从而造成潜在的重复投递模糊性。

550 是否总是识别出身份验证问题?

否。请阅读完整的响应以及导致该响应的命令。

该示例是否发送了外部邮件?

不。这些示例是假设的协议演练,而不是执行的本地或外部事务。

[ 来源 ]

来源

  1. RFC 5321简单邮件传输协议

    部分 §2.3 · §4.1 · §4.2 · §4.5

  2. RFC 4954用于身份验证的SMTP服务扩展

    部分 §4 · §6 · §7

  3. RFC 6409邮件消息提交

    部分 §3 · §4

  4. RFC 3207: SMTP STARTTLS

    部分 §4.2

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

    部分 §3.2

[ 词汇表 ]

词汇表

反向路径
用于返回处理的SMTP信封地址,可能为空。
点透明度
在SMTP数据传输期间转义和恢复以点为前缀的内容行。
瞬时故障
否定响应表明稍后的尝试可能会成功。

企业出处

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

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

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

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

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

知识库