add_action('wp_mail_failed', function ($e) {
  error_log('mail failed: ' . $e->getMessage());
});

反馈表单提示已收到,工单也入库了,客服邮箱三天零邮件,垃圾箱里也没有,日志里只有一行 sendmail not found。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,服务器没装 MTA,wp_mail 回退到 sendmail 直接失败,返回值被忽略。表单逻辑不检查发信结果,照样提示成功。

这次卡住的地方就在「反馈通知未发送」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。

处理上按这个顺序:换成 SMTP 插件或直接配 msmtp,先把发信通道打通;挂 wp_mail_failed 钩子写日志,失败要能看见;提交后判断返回值,失败的进重试队列。

改完只确认一件事:提交一条反馈后客服一分钟内收到通知,断开 SMTP 时日志里有失败记录。

作者 9823189