add_action('wp_mail_failed', function($e){
    error_log(print_r($e->get_error_message(), true));
});

有人留言后 wp_mail 的返回值是 true,收件箱和垃圾箱都没有,换三个邮箱一样,服务器日志里连一条发信记录都找不到。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:wp_mail 返回 true 只代表邮件交给了本机的 sendmail,投递失败不会回传。主机默认的 sendmail 常常没装或没有出口,返回值照样是成功。判断是否真的发出去要看邮件服务商的发送日志。

「评论通知邮件丢失」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

处理上按这个顺序:装一个 SMTP 插件把发信改成外部服务,账号密码和端口填完先发测试信;挂上 wp_mail_failed 钩子,把错误写进日志,别再只看返回值;发信域名补 SPF 和 DKIM,缺这两项即使发出去了也大概率进垃圾箱。

确认没问题再收工,测试信在邮件服务商后台能看到投递成功,收件箱十秒内收到。

作者 9823189