读者收到回复提醒,邮件标题显示成一排问号,正文里的中文正常,换到手机邮箱客户端标题仍是问号。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,主题在 wp_mail 的 subject 上做了本地化转码,把 UTF-8 转成了 GBK,邮件头却声明 UTF-8。标题在传输时按声明解码,就对不上了。正文走另一条编码路径,所以只有标题出问题。

「评论通知乱码」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

add_filter('wp_mail_charset', function(){ return 'UTF-8'; });
$subject = '您在《' . get_the_title($post_id) . '》的评论有新回复';

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。

具体做法是,先把 subject 上的转码函数去掉,统一保持 UTF-8;确认 wp_mail 的 charset 是 UTF-8,别让插件改成别的;用两个不同客户端各收一遍,标题和正文都要正常。

最后用这个标准收尾,邮件标题在两个客户端都显示正常中文,不再出现问号。

作者 9823189