客户收到通知邮件,正文里中文全是问号和方块,同一封信在网页版邮箱里打开却显示正常。日志里能对上时间点,这种反而好排。

Content-Type 里漏了字符集声明,或者声明成 us-ascii,客户端只能按默认字符集去解码正文。这一点先确认清楚,后面就不用反复试。

Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64
# 主题前缀用 =?UTF-8?B?

「邮件正文乱码」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。

临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

处理上按这个顺序:把字符集写成 UTF-8;正文改用 base64 编码;主题单独编码之后再发送。

结果对不对很好判断,手机端和网页端收到的中文都能正常显示,乱码彻底消失。

作者 9823189