跳到正文

网站联系表单的邮件为什么会进垃圾箱?SPF、DKIM 和 DMARC 如何解决

网站表单发来的邮件进了垃圾箱,甚至根本收不到?问题通常不在内容,而在发送方式。本文介绍要检查什么,以及需要配置的三条 DNS 记录。

阅读约 5 分钟

一位潜在客户填写了你的联系表单,网站显示"谢谢,我们会尽快联系您"。结果这条消息进了你的垃圾邮件箱,或者根本没有送达,你也就一直没有回复。双方都不知道发生了什么。

这是我们检查小企业网站时最常发现的问题之一,而原因很少出在邮件内容上。关键在于这封邮件声称是谁发出的,以及你的域名能否证明这一点。

如何判断是否存在这个问题

通过你自己网站的表单,分别用 Gmail 地址和工作邮箱给自己发一条测试消息,然后:

  • 不仅查看收件箱,也要查看垃圾邮件和"推广"等标签页。
  • 在 Gmail 中打开这封邮件,点击三个点的菜单,选择 显示原始邮件。顶部会显示三行:SPF、DKIM 和 DMARC,每一行后面是 PASS 或 FAIL。

只要有一项失败,或者根本没有显示,本文接下来的内容就适用于你。如果托管服务或表单工具有日志,也请查看:显示"已发送"但被退回的邮件,只会记录在那里。

常见原因:表单冒充了访客

很多联系表单,尤其是旧版 WordPress 插件和临时写的脚本,会以访客本人的地址作为发件人发送消息。也就是说,你的服务器发出了一封声称来自 maria@yahoo.com 的邮件。

在收件方看来,这完全就是伪造邮件,事实也确实如此:发信的是你的服务器,而不是 Yahoo。yahoo.com 等域名发布了严格的策略,要求其他邮件服务商拒收那些声称来自它们、却未通过身份验证的邮件。于是,这条消息被拒收,或者被放进垃圾箱。

解决方法很简单,而且不会有任何损失:

  • 发件人(From):使用你自己域名的地址,例如 website@yourcompany.com。
  • 回复地址(Reply-To):填写访客的地址。

你照样点击"回复"就能直接回复访客,唯一的区别是,邮件如实说明了自己的来源。

证明邮件属于你的三条记录

从自己的域名发信,只有在域名能为发信服务器作保时才有效。这正是以下三条 DNS 记录的作用。

记录 含义 位置
SPF “这些服务器可以代表我的域名发送邮件。” 域名上的一条 TXT 记录
DKIM 每封邮件上的数字签名,用你 DNS 中的公钥来验证 邮件服务商提供的 TXT 或 CNAME 记录
DMARC “如果邮件同时未通过 SPF 和 DKIM,请这样处理,并把报告发给我。” _dmarc.yourdomain.com 上的一条 TXT 记录

自 2024 年 2 月起,Gmail 和 Yahoo 要求所有发件人通过 SPF 或 DKIM 进行身份验证。批量发件人(每天向其用户发送约 5,000 封以上)则需要同时具备两者,并配置 DMARC 和一键退订。小企业的表单远远达不到这个量,但各家服务商的过滤器都是围绕这些规则构建的,缺少验证的邮件从一开始就处于劣势。

分步修复

1. 通过事务性邮件服务发送

不要依赖网站服务器自带的邮件功能。使用专门发送应用邮件的服务,例如 Resend、Postmark、Amazon SES,或你的邮件服务商提供的 SMTP。它们负责维护发信信誉和重试,还能让你看到每封邮件是否送达。

2. 在该服务中验证你的域名

服务会给出几条需要添加的 DNS 记录:通常是一条 DKIM 记录,往往还有一条用于发信子域名的 SPF 记录。请完全按照显示的内容,在你的 DNS 服务商处添加(也就是管理域名 DNS 的地方,不一定是你购买域名的地方)。然后等待服务显示域名已验证。

3. 每个域名只保留一条 SPF 记录

一个域名只能有一条 SPF 记录。如果你的邮箱使用 Google Workspace,同时还有另一个服务用同一域名发信,就要把两者写进同一条记录:

包含两个发信方的一条 SPF 记录
v=spf1 include:_spf.google.com include:spf.example-sender.com ~all

如果存在两条独立的 v=spf1 记录,所有邮件的 SPF 都会失败。另外,SPF 在超过十次 DNS 查询后就会失效,所以请删除已不再使用的服务对应的 include:。

4. 发布 DMARC 策略,从宽松开始

第一条 DMARC 记录,位于 _dmarc.yourcompany.com
v=DMARC1; p=none; rua=mailto:dmarc-reports@yourcompany.com

p=none 不会影响邮件投递,只是请各家服务商把"谁在以你的域名发信"的报告发给你。几周之后,当报告中只剩下你自己的服务时,再改为 p=quarantine。正是这一步,能防止有人以你的名义发送虚假发票。

5. 再次测试

再通过表单发送一条消息,查看 显示原始邮件。目标是三行都显示 PASS,并且 DKIM 一行显示的是你的域名,而不是发信服务的域名。

你也可以在终端里查询这些记录:

查询你的 SPF 和 DMARC 记录
dig +short TXT yourcompany.com
dig +short TXT _dmarc.yourcompany.com

什么时候需要找人帮忙

如果你的域名 DNS 分散在域名注册商、旧主机和邮件服务商之间,而且没人记得谁配置了什么,那么在改动任何东西之前,最稳妥的第一步是先把情况梳理清楚。这正是我们网站诊断的内容之一:除了安全、速度和 SEO,还会检查访问权限、DNS 和邮件,并给出按优先级排列的修复清单(查看报告示例)。在我们的方案中,联系表单、发信设置和这些 DNS 记录都由我们负责配置和监控。

域名与邮箱网站维护

本文还有以下语言版本: EnglishPortuguêsEspañol日本語

全部文章