← 返回博客

收不到邮件?逐步排查指南

邮件为什么收不到、如何系统地诊断原因——垃圾邮件过滤器、退信日志、DNS 问题、黑名单——以及如何在各个环节进行修复。

更新于 2026年10月23日
收不到邮件?逐步排查指南

收不到邮件?逐步排查指南

邮件丢失是软件中最令人沮丧的问题之一,因为故障可能发生在整条系统链上的任何环节——您的发送服务器、DNS、收件人的邮件服务器、垃圾邮件过滤器,以及收件人的邮件客户端——而大多数步骤对用户来说都是不可见的。

本指南帮助您系统地诊断邮件丢失问题,无论您是在调试应用发信问题的开发者,还是无法收到邮件的最终用户。

第一步:确认邮件确实已发送

在排查接收端问题之前,先核实发送端。

查看应用日志或投递事件

如果邮件通过 Rovela 等 API 发送,请查看该邮件的投递事件:

  • API 调用是否已发出?如果日志中没有请求记录,说明调用 API 的代码根本没有执行。
  • API 是否接受了邮件?HTTP 422 表示请求格式有误;HTTP 500 表示发送服务发生了错误。
  • 投递状态是什么?API 调用成功意味着邮件已被接受进行投递,而不是已经投递完成。请查看投递或退信事件。

检查代码中是否有静默失败

// 这样会静默吞掉错误
sendEmail(params);

// 这样才能暴露错误
const result = await sendEmail(params);
if (!result.ok) {
  console.error('发送失败:', result.error);
}

很多邮件丢失的 bug 都是静默异常:代码到达发送调用时出错,应用继续运行,没有人知道邮件从未发出。

第二步:检查邮件是否已退信

如果发送服务已接受邮件但邮件始终未到达,请检查是否有退信通知。

硬退信:永久性失败

硬退信意味着接收服务器永久性地拒绝了该邮件。常见原因:

  • 邮件地址不存在(最常见)
  • 域名不接收邮件
  • 发件人被接收域名永久封锁

软退信:临时性失败

软退信意味着临时性失败——服务器接受了连接,但目前无法投递邮件:

  • 邮箱已满
  • 服务器暂时不可用
  • 速率限制

大多数发送服务会在 24-72 小时内自动重试软退信。如果邮件在此窗口后仍未到达,请检查所有重试是否均已耗尽。

第三步:检查垃圾邮件文件夹

垃圾邮件文件夹是"未收到"的正常邮件最常见的去向。

如果邮件在那里,问题是为什么被分类为垃圾邮件:

垃圾邮件评分

垃圾邮件过滤器根据数十个信号进行评分:

  • 身份验证失败:DKIM 或 SPF 未通过会提高评分
  • 内容信号:异常的 URL 模式、某些特定词语、过多图片、破损的 HTML
  • 发送信誉:该邮箱服务商对 IP 或域名的信誉评价
  • 参与度历史:如果之前的邮件从未被打开,新邮件评分会更低

如何从垃圾邮件中脱身

  • 首先修复身份验证(见第五步)
  • 请收件人将邮件标记为"非垃圾邮件"——这是对服务商的直接信号
  • 如果您在发送营销邮件,检查列表卫生和退订管理
  • 使用 Google Postmaster Tools 或 Microsoft SNDS 了解主要服务商如何评价您的发送信誉

第四步:确认地址是否正确

大量"我没收到邮件"的反馈最终都源于地址拼写错误:

  • user@gmai.com(少了一个 l)——语法有效,但该域名可能会接收这封邮件
  • user@example,com(逗号代替句点)——API 会返回验证错误
  • firstname.lastname @example.com(@ 前有空格)——同上

如果地址通过格式验证但邮件仍未到达,请通过带外方式(电话、短信或当面)与收件人确认确切地址。

第五步:检查发件域名的身份验证

身份验证失败会导致许多正常邮件进入垃圾邮件文件夹或被直接拒绝。

检查 SPF

您的 SPF 记录应包含代表您域名发送邮件的每台服务器。如果您通过 Rovela 发送,SPF 记录应包含 Rovela 的 SPF 机制:

v=spf1 include:_spf.rovela.dev ~all

使用 dig TXT yourdomain.com 验证记录是否已发布,或使用 SPF 验证工具进行检查。

检查 DKIM

DKIM 添加接收服务器验证的加密签名。如果签名缺失或无效,许多服务商会将该邮件视为可疑。

在 Rovela 中,每个域名在验证时都会获得唯一的 DKIM 密钥,以 DNS TXT 记录的形式发布。对 DNS 进行任何更改后,验证密钥是否已传播:

dig TXT rovela._domainkey.yourdomain.com

检查 DMARC

DMARC 告知接收服务器当 SPF 和 DKIM 失败时应如何处理。p=reject 的 DMARC 策略意味着任何身份验证失败的邮件都会被直接拒绝。

如果您最近添加了 p=reject 的 DMARC 并且邮件停止到达,请检查是否有某个发送服务器(应用或第三方服务)未包含在您的 SPF 记录中,或未使用 DKIM 签名。

第六步:检查您的 IP 或域名是否在黑名单中

黑名单是指反垃圾邮件组织或个别 ISP 将您的发送 IP 或域名添加到已知恶意发件人列表中。

如何检查

  • MXToolbox(mxtoolbox.com/blacklists.aspx)可检查数十个公共黑名单
  • Spamhaus(spamhaus.org)是最具影响力的黑名单——出现在此处会严重影响向所有主要服务商的投递
  • Barracuda、SORBS 和 SpamCop 也被广泛使用

如何申请移除

大多数黑名单都有移除流程:

  1. 找出并修复根本问题(账号被入侵、从您的 IP 发送垃圾邮件、开放中继)
  2. 提交移除申请并说明已修复的内容

在修复问题之前不要申请移除——反复被列入黑名单会更难撤销。

第七步:查看收件服务器日志(如有权限)

如果您在排查两台自有服务器之间的投递失败,收件服务器的邮件日志是权威来源:

grep "from=<sender@domain.com>" /var/log/mail.log | tail -20

日志显示了确切发生的情况:连接是否被接受、邮件是否投递到了邮箱,如果被拒绝,则显示确切的拒绝原因。

第八步:用新地址测试

如果已穷尽其他选项,请向主流服务商(Gmail、Outlook、iCloud)的新地址发送测试邮件。如果邮件能到达那里但到不了目标地址:

  • 问题特定于该收件域名
  • 请联系其邮件管理员或 IT 部门

如果任何地方都到达不了:

  • 您的发送 IP 可能被限速或封锁
  • 您的身份验证配置存在系统性问题
  • 您的发送服务正在经历故障

预防措施

对于应用开发者

  • 记录每次发送尝试,包括收件人地址、消息 ID 和 API 响应
  • 接收投递和退信 Webhook,并将其与原始消息关联存储
  • 设置告警阈值:退信率超过 2% 时发出告警,在它成为信誉问题之前处理
  • 在预发布环境中使用真实收件箱对完整发送路径进行测试,而非仅依赖单元测试

对于最终用户和域名管理员

  • 在假设邮件未发送之前,先检查垃圾邮件文件夹
  • 维护域名 DNS 记录,定期验证身份验证配置
  • 查看 Postmaster Tools 或类似仪表盘,了解您在主要服务商处的信誉
  • 保持发送列表整洁——已退订的用户应立即移除,退信地址应立即抑制

Rovela 会自动抑制硬退信地址,并为每封邮件记录投递状态,让您始终能查到邮件的发送记录及其最终结果。