本页内容WordPress 默认如何发送邮件
WordPress 网站发送的邮件比站长以为的更多。联系表单通知、密码重置邮件、新用户欢迎邮件、评论审核提醒,如果是网店,还包括 WooCommerce 发送的每一封订单确认、发票和配送进度通知。其中大多数邮件都没人专门设计,也没人检查,直到有客户反馈自己一直没收到订单邮件。
如果其中某封邮件进入了垃圾邮件,不要急着修改文案,先检查邮件是如何从服务器发出的。在 WordPress 中,这部分默认采用的恰恰是送达率最低的方式。
WordPress 默认如何发送邮件
WordPress 本身以及几乎所有发送邮件的插件,包括 WooCommerce 和表单插件,都会使用同一个函数 wp_mail()。该函数将邮件交给 PHPMailer,后者默认再将其传给 PHP 的 mail(),然后由它交给托管服务器上的邮件程序。整个过程不登录邮件服务商、不添加签名,DNS 中也没有任何记录表明这台服务器可以代表你的域名发送邮件。
系统选择的发件人地址是 wordpress@ 加上你网站的域名(WordPress 会去掉开头的 www.)。如果你从未更改过该地址,客户会在发件人一栏看到它,而许多网站根本没有创建这个邮箱。
在共享托管环境中,邮件会从托管服务商的服务器发出,并使用由大量其他网站共享的 IP 地址。如果其中某个网站向购买的邮件列表发送邮件,或者遭到入侵并开始大量发送垃圾邮件,该 IP 地址的信誉就会变差,而你的密码重置邮件与这些垃圾邮件使用同一个地址发出。
因此,WordPress 默认安装所发送邮件的 SPF 与你的域名不一致。退信地址通常仍使用托管服务商自己的服务器名称。如果改成你的地址,SPF 则会直接失败。邮件也没有你域名的 DKIM 签名,因此 DMARC 会失败。Gmail 和 Yahoo 于 2024 年 2 月实施了发件人规则,Microsoft 于 2025 年 5 月对每天向 Outlook.com 发送超过 5,000 封邮件的域名实施了同类规则。自 2025 年 11 月以来,Gmail 开始拒收更多违反其规则的邮件,而不是将其归入垃圾邮件。
通过正规的邮件服务发送
最重要的修复是停止使用 mail()。安装一个 SMTP 插件(常见的有 WP Mail SMTP、FluentSMTP 和 Post SMTP,它们都有免费版本),并将其连接到能够正确发送邮件的服务:你自己的邮箱服务商,例如 Google Workspace 或 Microsoft 365,或者 Amazon SES、Brevo、SendGrid、Mailgun 这类事务邮件服务。
该插件会替换 wp_mail() 底层的传输方式,因此,无需修改其他插件,每个插件发出的所有邮件都会通过新方式发送。如果插件提供服务商的 API 选项,请优先使用该选项,而不是使用密码的普通 SMTP。WP Mail SMTP 指出,即使你的主机屏蔽了 SMTP 端口,API 方式仍然可以正常工作。
很多人会跳过下一步。你需要在该服务商处验证域名:每个服务商都会提供需要发布的 DNS 记录,通常是两到三条用于 DKIM 的 CNAME 记录,以及一条 SPF include,或者一个自定义 return-path 域名。在这些记录添加到你的 DNS 之前,服务商会在签名中使用自己的名称,DMARC 仍会失败,就像在主机上发送时一样。
联系表单中的 From 地址
包括 Contact Form 7 和 WPForms 在内的表单插件允许你选择收到的通知邮件中 From 行的内容。许多配置会在这里填写访客的地址,这样点击 Reply 就能回复访客。这看起来很聪明,但 DMARC 正是为了阻止这种做法而设计的。
假设一位名叫 Anna 的访客使用 anna@yahoo.com 填写表单。你的网站现在通过 Yahoo 从未授权的服务器发送邮件,却声称邮件来自 yahoo.com。yahoo.com 发布了 p=reject 的 DMARC 策略,因此遵循该策略的收件服务器会将这封通知判定为伪造邮件并拒收。如果访客使用 Gmail,相关策略会宽松一些,邮件更常被归入垃圾邮件。WPForms 在其文档中明确警告了这个问题。From 是你,Reply-To 是访客
应改为这样设置:
- From: 你自己域名下的地址,例如
forms@yourdomain.com,域名应与你的 SMTP 插件完成身份验证时使用的域名相同。 - Reply-To: 表单字段中的访客地址。点击 Reply 仍会回复 Anna。
- To: 你实际查看的邮箱。
在 Contact Form 7 中,这些设置位于 Mail 选项卡:在 From 中填写你自己的地址,并在 Additional headers 下添加 Reply-To: [your-email]。其他表单插件的通知设置中也有 Reply-To 字段。
WooCommerce 邮件
WooCommerce 有自己的发件人设置:依次进入 WooCommerce、Settings、Emails,然后在 "Email Sender Options" 部分设置 "From" 名称和 "From" 地址。默认情况下,该地址是网站管理员邮箱。如果安装商店的人使用了 Gmail 地址,那么每封订单确认邮件都会声称来自 gmail.com,并且会出于与上述联系表单相同的原因无法通过 DMARC。请在此处填写你已完成身份验证的域名下的地址,商店名称适合作为发件人名称。(对于发送给你的订单通知,WooCommerce 已经把客户地址放在 Reply-To 中,这才是正确的设置方式。)
商店邮件会遇到两个联系表单不会遇到的问题。
第一个问题是发送量。促销活动或邮件简报插件通过与订单确认邮件相同的渠道向客户发送邮件,会让营销邮件和事务性邮件共用同一套信誉。如果邮件简报收到投诉,收据邮件也会受到影响。通过不同的服务发送这两类邮件可以将它们分开,为营销邮件使用单独的子域名也会有一点帮助,不过接收方仍会考虑主域名的信誉。
第二个问题是退订。订单确认和密码重置邮件属于事务性邮件,不受 Gmail 和 Yahoo 一键退订规则的约束。发送给过往买家的评价邀请、弃购提醒或“你可能还喜欢”邮件属于营销邮件。如果你大量发送此类邮件,就必须完全遵守该规则,也就是添加带有一键退订选项的 List-Unsubscribe 邮件头。请检查发送这些邮件的扩展是否添加了该邮件头,无论是否添加,下面的测试都会显示结果。
DNS 方面,简单来说
无论你通过什么服务发送邮件,要让邮件获得信任,你的域名都需要在 DNS 中配置三项内容。完整说明请参阅 SPF、DKIM 和 DMARC 详解。对于 WordPress 网站,具体含义如下。
- SPF。 在域名上设置一条 TXT 记录,列出哪些服务可以代表该域名发送邮件。许多发送服务通过自己的退信域名完成对齐,因此不需要修改这里。如果你的服务要求添加
include:,而域名已经有一条用于邮箱提供商的记录,请将它添加到现有记录中。不要创建第二条记录,两条 SPF 记录属于配置错误,并且会导致两条记录都失效。使用 SPF 检查工具检查结果。 - DKIM。 配置发送服务提供给你的记录。记录生效后,该服务会使用你的域名为每封邮件签名,DMARC 检查的就是这个签名。
- DMARC。 在
_dmarc.yourdomain.com设置一条 TXT 记录。先使用v=DMARC1; p=none; rua=mailto:,后面填写一个你会查看的邮箱地址。当报告显示你的邮件均未验证失败时,再收紧策略。DMARC 检查工具可以读取你当前的配置。
请注意,托管服务器可能仍在自行发送某些邮件,例如定时任务或直接调用 mail() 而不是 wp_mail() 的旧插件。这些邮件会绕过 SMTP 插件,并在 DMARC 报告中显示为你未预期的来源。
测试真实邮件,而不是测试消息
每个 SMTP 插件都有一个 "send test email" 按钮,但它只能证明连接正常。它不会显示 WooCommerce 实际生成的订单确认邮件、包含 Reply-To 的表单通知,也不会显示包含 WordPress 所添加链接的密码重置邮件。
所以,我会让 WordPress 发送真实邮件。首页提供的测试地址只能接收一封邮件,因此要为每封待检查的邮件获取一个新地址。测试表单时,暂时将该地址设为通知收件人,然后提交表单。测试 WooCommerce 时,使用该地址作为客户邮箱下一笔测试订单。测试密码重置时,将该地址分配给一个测试用户,然后请求重置密码。每封邮件都会生成单独的报告,其中包括 SPF、DKIM 和 DMARC 及其对齐情况、21 个黑名单、内容和链接,以及群发邮件发件人规则。要检查邮件在 Gmail、Outlook、Yahoo 和其他提供商中进入哪个文件夹,需要将同一封邮件发送到一组收件箱,并在主题中添加标记。表单或商店订单无法做到这一点,因此这部分留给你自己发送的邮件进行测试。
如果你不想手动创建测试订单,可以使用免费的 WordPress 插件。它会通过你网站自己的 wp_mail() 发送这些邮件,也就是客户邮件所走的同一条路径,并在仪表盘中显示结果。当网站开始发送一种以前未见过的邮件时,它也会检测到。
如果邮件仍然进入垃圾邮件
如果身份验证通过,From 地址也属于你的域名,但邮件仍然进入垃圾邮件,请检查邮件发送通道的信誉。如果你仍在使用 mail(),共享主机 IP 被列入黑名单是一个常见原因,黑名单检查工具会显示相关结果。邮件内容的影响通常没有人们想象的那么大。只有一个链接和三行文字的表单通知,很少会单独触发过滤器;但使用复杂 HTML 模板、包含一张大图和短链接的 WooCommerce 邮件则可能触发过滤器。
检查一封邮件,根据报告修复问题,然后重新发送到一个新地址。