从生产库拉了一份用户表到测试站,跑下单流程测试,二十分钟内 300 封订单确认邮件发到了真实客户邮箱,退订和投诉跟着来了。日志里能对上时间点,这种反而好排。

测试站的发信函数还连着生产 SMTP,数据库里又都是真实地址,一次压测就把邮件全发了出去。发信没有沙箱,也没有收件人白名单。这一点先确认清楚,后面就不用反复试。

add_filter('wp_mail', function ($args) {
  $args['to'] = 'qa@example.com';
  return $args;
});

这次卡住的地方就在「测试环境邮件外发」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

处理上按这个顺序:测试站改成 MailHog 或 Mailpit,所有邮件只落本地界面,不外发;配置文件里加一道过滤器,收件人不在白名单就改写成本地地址;生产库导入后先把用户邮箱批量改成 @example.com;发信插件在测试环境直接停用。

结果对不对很好判断,测试站任何流程触发的邮件都只出现在本地收件箱,真实邮箱收不到一封。

作者 9823189