搜索全站
网站迁移 7 分钟阅读

WordPress迁移后站内邮件不发评论通知失效,SMTP与域名解析修复

网站迁移后找回密码邮件收不到、评论通知也失效,用户无法重置登录密码。本文讲清wp_mail依赖服务器邮件服务的原理,用SMTP插件配置授权码并添加SPF域名解析记录,彻底解决站内邮件发不出去的问题,让站内通知与找回密码功能全部恢复正常,评论互动不再中断。

U
UFO_PF 2026-10-10 · 阅读 7 分钟
Wo 网站迁移
阅读提示
本文约 2,611 字,预计阅读 7 分钟。文中命令与配置均经过实测,可直接参考执行。

引言

站迁移完了,功能也正常,可过几天你发现:用户点「忘记密码」收不到重置邮件,有人留言你也收不到通知,订阅者订阅了却没收到确认信。登录后台测试,提示「邮件可能未成功发送」,但就是查不到原因。很多站长第一反应是「WordPress 坏了」,其实邮件发送和网站文件、数据库根本是两码事。

事情的真相是:WordPress 的 wp_mail() 函数本身只负责组织邮件内容,真正把邮件投递出去要靠服务器的邮件服务(sendmail 或 PHP mail 函数)。本地电脑往往配了邮件服务,所以本地测试正常;而服务器尤其是云服务器,默认几乎没装邮件服务,或者服务商屏蔽了 25 端口,邮件自然发不出去。解决思路就两条:装一个 SMTP 插件走正规发信通道,再配好域名解析证明你「有资格」用这个域名发信。

故障原因分析

  1. 服务器未安装邮件服务。 wp_mail() 默认调用 PHP 的 mail(),而云服务器通常没配 sendmail/postfix,函数直接返回失败。
  1. 25 端口被屏蔽。 为防垃圾邮件,多数云厂商默认封锁出站的 25 端口,即使在服务器上装了邮件服务也发不出去。
  1. 发件域名没有 SPF/DKIM 记录。 收件方(如 QQ、Gmail)校验发件域名身份失败,会把邮件判为垃圾邮件或直接拒收。
  1. 发件地址与域名不匹配。 用 wordpress@servers-default-domain 这种非自己域名的地址发信,极易被拦截。
  1. 迁移后域名变更未同步邮件配置。 旧站配过 SMTP,换域名后发件域名、授权码等没更新,导致认证失败。
  1. SMTP 插件配置错误或密码过期。 授权码填错、端口与加密方式不匹配,都会让发信失败。

分步解决方案

方法一:安装 SMTP 插件走正规发信通道(推荐)

用「WP Mail SMTP」或「Fluent SMTP」这类成熟插件,把发送方式从默认 PHP mail 改成 SMTP:

  1. 后台「插件 → 安装插件」,搜索 WP Mail SMTP,安装并启用。
  2. 进入插件设置向导,填写你的邮箱服务商信息。以 QQ 企业邮箱或腾讯企业邮为例:SMTP 主机 smtp.exmail.qq.com,端口 465(SSL)或 587(TLS),用户名填完整邮箱地址,密码填「授权码」而非登录密码。
  3. 设置「发件人邮箱」为你自己域名的邮箱,如 no-reply@newdomain.com;「发件人名称」填站点名。
  4. 使用插件自带的「发送测试邮件」功能,填一个你能收到的邮箱,点发送。收到即成功。

方法二:用代码强制指定发件人(不改插件也能缓解)

在主题的 functions.php 里统一下发件人,避免用默认的服务器地址:

// 文件路径:当前主题/functions.php
// 统一设置站内邮件发件人
add_filter('wp_mail_from', function ($email) {
    return 'no-reply@newdomain.com';
});
add_filter('wp_mail_from_name', function ($name) {
    return '你的站点名';
});

注意:这只是改了「信封上的名字」,真正的投递仍依赖方法一或服务器的邮件服务,单独用它通常治标不治本。

方法三:配置域名解析(SPF 记录,提高送达率)

登录你的域名 DNS 管理后台,添加一条 TXT 记录,声明哪些服务器可以用你的域名发信:

# 域名 DNS 后台添加 TXT 记录(示例,按服务商给的值填写)
主机记录:@
记录类型:TXT
记录值:v=spf1 include:spf.mail.qq.com ~all

如果用腾讯企业邮,把 spf.mail.qq.com 换成服务商提供的;用阿里云邮件推送则用对应域名。有条件的话再按服务商指引配置 DKIM 签名,进一步降低进垃圾箱的概率。

方法四:排查端口与服务器邮件服务

若你坚持用服务器自带邮件服务,先确认端口是否可用:

# 测试到外部邮件服务器 25 端口是否连通
telnet smtp.qq.com 25

连不上基本就是端口被封,直接改用 465/587 端口的 SMTP 方案更省心。也可以安装轻量邮件服务:

# 以 Debian/Ubuntu 为例安装 sendmail(不一定能解决端口封锁)
apt-get install -y sendmail

方法五:检查插件冲突与调试日志

若用插件仍发不出,暂时停用其他插件排查冲突,并开启 WordPress 调试日志定位报错:

// 文件路径:网站根目录/wp-config.php
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

日志文件位于 wp-content/debug.log,里面会记录 wp_mail 相关的错误信息。

常见踩坑点

  • 把登录密码当授权码。 多数邮箱 SMTP 要用「授权码」,不是网页登录密码,填错必然认证失败。
  • 发件人用了非本域名地址。 用服务器随机域名发信,收件方验证不通过,邮件直接进垃圾箱。
  • 端口和加密方式不匹配。 465 要配 SSL、587 要配 TLS,配错就连不上。
  • 忘了加 SPF 记录。 域名没声明发信服务器,送达率极低,务必补上 TXT 的 SPF。
  • 调试模式长期开着。 WP_DEBUG 排查完要关掉并及时删除 debug.log,避免暴露路径信息。
  • 换域名后没改发件人。 迁移后发件邮箱还写着旧域名,认证自然失败,要同步更新。

总结

迁移后站内邮件不发、评论通知失效,问题不在 WordPress 本身,而在于服务器缺少可用的邮件发送通道。wp_mail() 只负责写信,投递得靠邮件服务,而云服务器默认没有邮件服务、25 端口又常被封,所以必须绕道 SMTP。正确做法是装一个 SMTP 插件,用自己域名的邮箱配合授权码发信,同时在 DNS 里补上 SPF(有条件再加 DKIM)记录提升送达率,最后用测试邮件验证。按这套流程处理,迁移后邮件不发的问题基本都能根治,找回密码、评论通知、订阅确认等功能也就恢复正常了。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。