新用户注册后页面提示已发送激活邮件,后台日志里 wp_mail 返回 true,收件箱和垃圾箱都翻过,就是找不到这封信。乍看像缓存或者权限的锅,追下去往往不是。

add_action('phpmailer_init', function($m){
  $m->isSMTP();
  $m->Host = 'smtp.example.com';
  $m->Port = 587;
});

追下去是这么回事:PHP 的 mail 函数只是把信交给本机传输代理,返回 true 只说明交出去了,本机没装代理或者代理把信丢了都不会报错。

「注册激活邮件未送达」这类改动最怕改一半,回滚脚本先准备好,再动生产。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

具体做法是,先装 SMTP 插件把发信改走外部邮件服务器;打开插件的调试日志记录完整会话过程;用一个外部邮箱真实收一次信确认。

验收就看一点,外部邮箱能收到激活信,调试日志里出现服务端的 250 接收确认。

作者 9823189