更新于

为什么收不到验证码邮件?按投递链路逐步排查

#验证码邮件#邮件投递#故障排查

点击“发送验证码”以后,邮件并不是瞬间从网页跳进收件箱。网站需要生成消息、放入发送队列、找到目标域名的邮件服务器,通过身份验证和信誉检查,最后才能把邮件放进仍然有效的收件箱。

收不到验证码时,连续点击重发通常只会增加变量。更有效的方法是沿着投递链路逐段排查。

一封验证码邮件要经过哪些环节

  1. 网站接受请求并创建发送任务;
  2. 发件服务查询目标域名的邮件服务器;
  3. 发送方和接收方通过 SMTP 通信;
  4. 接收方可以接受、暂时延迟或永久拒绝;
  5. 已接受的邮件仍可能进入垃圾箱、隔离区或被内容过滤;
  6. 收件箱页面需要刷新或轮询后才会显示邮件。

RFC 5321 把 SMTP 失败分为临时失败和永久失败。通常 4xx 表示发送方稍后可以重试,5xx 表示当前请求被永久拒绝。因此,“20 秒还没出现”和“邮件已经投递失败”不是同一回事。

第一步:确认网站确实接受了发送请求

查看页面是否有明确成功提示、重发倒计时,或者网络请求是否返回成功。按钮转圈并不能证明邮件已经进入队列。表单校验失败、频率限制、验证码挑战过期或前一次请求仍在处理,都可能让流程停在邮件系统之前。

如果这是你自己的产品,应该在接受请求时生成消息或任务 ID,并确认后台任务是否创建、邮件服务商是否返回接收 ID。日志里不要记录验证码正文。

如果是第三方网站,先等重发倒计时结束,再尝试一次。短时间内反复点击可能触发风控,也可能让前一封邮件里的验证码失效。

第二步:逐字检查收件地址

常见错误包括少复制一个字符、末尾带空格、选错临时邮箱域名,或者使用了上一次会话的地址。使用临时邮箱时,还要确认提交表单后没有重新生成地址。

网站已经提示发送成功后,再修改输入框并不会改变已发邮件的收件人。正确做法是更新账号邮箱,然后重新请求验证码。

第三步:刷新同一个收件箱,并给投递留出时间

保持当前临时收件箱页面打开,正常刷新即可。发件方排队、接收方临时延迟或网络重试,都可能让邮件晚几分钟出现。

观察到的现象更可能的问题位置下一步
网站没有明确成功提示应用或表单校验先解决页面错误
其他邮件能到,只有某个发送方不到发送方配置或信誉让发送方检查投递日志
同一发送方能投递到其他邮箱接收域策略差异重要账号改用长期地址
几分钟后才出现队列或临时 SMTP 延迟只使用最新有效验证码
收件箱过期或地址已变化临时邮箱生命周期生成新地址并完整重走一次

第四步:理解过滤和发件人认证

接收系统判断的不只是“邮箱地址存不存在”。它还可能检查 SPF、DKIM、DMARC 对齐、反向 DNS、邮件格式、TLS、发送历史、投诉率、链接和正文特征。

Google 的发件人指南说明,认证缺失、DNS 无效、格式错误、垃圾邮件率过高或违反政策,都可能导致邮件进入垃圾箱、被临时拒绝或永久拒绝。大批量发件人受到的要求最明确,但小型交易邮件系统同样应该正确配置认证并保持稳定发送行为。

如果你负责发送系统,需要检查:

  • SMTP 返回码和增强状态码;
  • 精确发件域名的 SPF 与 DKIM 结果;
  • 可见 From 域名和认证域名是否满足 DMARC 对齐;
  • 对方返回的是 4xx 延迟还是 5xx 拒绝;
  • 任务是否只进入队列,却没有交给邮件服务商;
  • 多次请求是否让旧验证码失效。

不要每隔几秒发送一次相同邮件。应尊重接收方的重试提示并使用退避策略。

第五步:确认网站是否屏蔽临时邮箱域名

有的网站会在表单阶段直接拒绝一次性邮箱;也有网站先接受地址,再由风险系统停止发信。这种情况下,TempMailer 无法要求对方发信,也无法改变对方的账号规则。

如果服务明确要求长期地址,请尊重它的要求。未来需要找回的账号应该使用长期邮箱或自己控制的转发别名,不要通过连续更换域名绕过限制。

第六步:检查收件箱寿命是否短于投递延迟

验证码只有在“验证码仍有效”和“收件箱仍存在”两个条件同时成立时才有用。发件服务器的重试周期可能比临时收件箱更长;延迟邮件到达时,网站验证码也可能已经过期。

使用 TempMailer 时:

  • 等待期间保持当前页面和地址不变;
  • 不要在流程中途重新生成地址;
  • 确认上一次请求超时后再重发;
  • 如果最后收到多封,只尝试最新一封;
  • 涉及人工审核或未来找回时,改用长期地址。

开发者应该保存什么诊断信息

自己的应用可以记录状态和时间,但不要记录秘密内容:

verification_requested -> job_queued -> provider_accepted
-> smtp_deferred | smtp_rejected | delivered

建议保存邮件服务商消息 ID、目标域名、模板版本、尝试次数和脱敏后的 SMTP 状态。普通日志中应隐藏收件地址的本地部分,也不能保存验证码。这样既能区分应用错误和投递问题,又不会制造新的隐私风险。

什么时候应该停止重试

网站明确不支持一次性邮箱、账号未来很重要、临时收件箱已经过期,或者连续请求开始触发频率限制时,都应该停止重试并换一种方式。

最短而安全的排查顺序是:确认发送成功、核对完整地址、等待一次、刷新同一个收件箱、倒计时结束后只重试一次;仍然收不到,就改用长期地址或联系发送方检查日志。

参考资料

  1. RFC 5321:简单邮件传输协议
  2. Google:电子邮件发件人指南
  3. Google:电子邮件发件人指南常见问题

相关内容