邮件源码里每行末尾都多一个等号,正文到 78 列就断开,英文单词被硬切成两半,客户端还原不出来。乍看像缓存或者权限的锅,追下去往往不是。

grep -i 'content-transfer-encoding' mail.eml
perl -MMIME::QuotedPrint -e 'print decode_qp(<>);' mail.eml

追下去是这么回事:传输编码按 76 列折行,软换行标记没有被客户端正确还原,多是自己拼接邮件体时把编码算错了。

碰到「邮件正文断行」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。报错里带路径的,先去看那个路径在不在、权限对不对。

同一份配置存在多处的,先确认改的是被加载的那一份。

具体做法是,确认正文使用 quoted-printable 编码;核对传输编码头有没有写对;改用库函数生成不要手拼字符串。

验收就看一点,解码后每行正文都完整,客户端不再出现孤零零的等号。

作者 9823189