上线三天后点邮件里的「查看订单」跳到 staging.example.com,页面还挂着测试环境的水印,客服陆续收到十几条反馈。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

grep -rniE 'staging|localhost|127\.0\.0\.1' templates/mail/
# 命中即失败
python -m pytest tests/test_mail_links.py

模板里的链接是硬编码的,构建时没做环境变量替换,测试环境那份模板被直接带上生产。发布清单里也没有专门检查外链域名这一步。这一点先确认清楚,后面就不用反复试。

「邮件模板测试域名」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。

具体做法是,模板里的域名统一走配置变量,构建时按环境注入,禁止硬编码;发布前跑一遍扫描,正文和 href 里出现 staging、localhost、127.0.0.1 就阻断;上线后自己发一封到自己邮箱,逐个点开链接确认域名。

改完照着核一遍,扫描命令无输出,收到的邮件里所有链接都指向正式域名。

作者 9823189