发送接口返回成功之后,还需要知道邮件事件如何更新产品事实,以及用户未收到邮件时怎样继续。本文补充事务邮件收件路径的验收材料,未发送任何真实邮件,也不验证发件域名。
开始前在选型记录记录服务商、测试环境、发件身份、模板版本、事件类别、负责人和恢复入口。收件地址、验证码、重置令牌和正文不进入共享材料。
把不同层的成功分开记录
[
{"message_id":"mail-example","event_id":"delivery-example","state":"receiver_accepted","source":"synthetic"},
{"message_id":"mail-example","event_id":"delivery-example","state":"receiver_accepted","source":"synthetic"}
]
这是教学事件模型,不是服务商原始payload或签名。使用JSON格式化核对两个相同事件ID,再用JSON对比比较业务处理前后记录;解读JSON不会验证来源、收件人或投递。
Postmark的投递事件表示收件服务器接受邮件,不证明邮件进入收件箱或已读。它还说明同一邮件多收件人会产生多个投递事件;不能默认仅用message_id识别一次投递。Postmark投递说明于2026-10-04复核,其他服务需另核对事件定义。
对照结果与失败路径
| 合成场景 | 预期观察 | 不应得出的结论 |
|---|---|---|
| 服务商已接受发送 | 待观察后续事件,用户可看到等待说明 | 用户已收到邮件 |
| 收件服务器接受 | 保存投递事件,本模型重复事件只记一次 | 进入收件箱或已读 |
| 永久退信或抑制 | 停止同类盲目重试,记录类别与安全替代路径 | 重试更多次总能成功 |
| 未取得后续事件 | 记录未知,核对事件采集及发送状态 | 邮件确定未投递 |
合成成功对照:delivery-example重复到达,业务记录数1;收件箱位置未知
合成失败:业务记录数2;或把receiver_accepted显示为“已读”
合成失败:抑制状态仍触发循环重发
合成未知:事件链路没有记录,发送与收件侧事实尚未核对
验收安全重发与恢复
验证码和密码重置的重发需要频控、令牌有效期及账户枚举防护。界面说明等待与替代操作,但不泄露账户是否存在。旧请求与新请求的令牌有效性由服务端明确;不能只刷新倒计时就称恢复。
测试环境只使用自己控制的地址和供应商正式测试方法。重放事件与重新发送邮件是不同操作;优先重放处理记录来核对幂等,不向真实用户重复发送。本轮合成材料没有验证实际Webhook鉴权,各服务商方法必须分别核实。
遇到持续退信、抑制绕过或重复重发,先停止受影响发送任务,保留模板版本与事件摘要,核对身份记录和业务触发。回退模板或代码不能撤回已发出的邮件,恢复前要说明已产生影响和负责人。
按同一模板、发件身份及客户端条件复查,保留服务商接受、收件侧事件与用户操作三个层次。在排查记录填写观察和未知,并用任务工作表保存下一步。一次受控投递不承诺地区覆盖或长期送达率。
