纯文本回退部分原本分了五行,收件箱里显示成一整段连着的话,地址和电话挤在一起。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,纯文本段用单个 LF 拼行,邮件传输按 SMTP 规范只认 CRLF,单独的 LF 在部分客户端会被当空格处理。编码层再套一层 quoted-printable 时更容易丢。

「邮件纯文本换行」这类改动最怕改一半,回滚脚本先准备好,再动生产。改完顺手把文档补一句,省得下次自己重新推一遍。

text = '\r\n'.join(lines)
assert '\n' not in text.replace('\r\n', '')
print(repr(text[:80]))

监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。

动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

具体做法是,纯文本段统一用 CRLF 拼接,发之前打印 repr 确认;需要空行的地方写两个 CRLF,别依赖客户端自动折行;用源码视图看传输后的正文,确认行尾是 0d0a。

最后用这个标准收尾,纯文本邮件按原分行显示,地址和电话各占一行。

作者 9823189