Google SMTP发送西里尔文邮件主题编码乱码问题求助
解决Google SMTP发送西里尔文邮件主题乱码的问题
这个问题我之前做俄文邮件推送时也踩过坑!核心原因是邮件主题(属于邮件头部分)不能直接使用原始UTF-8或Windows-1251字符,必须遵循RFC 2047标准的MIME编码格式,Google SMTP才会正确解析并显示。
为什么你之前的尝试没生效?
你用iconv或mb_convert_encoding只是转换了字符的编码,但没有按照邮件头的规则对内容进行MIME包装。邮件头的解析逻辑和邮件正文(HTML/Plain Text)不同,直接输出非ASCII字符会被SMTP服务器错误解析,导致乱码。
正确的解决方案:使用mb_encode_mimeheader函数
PHP的mbstring扩展提供了专门处理邮件头编码的函数mb_encode_mimeheader,它会自动把西里尔文主题转换成符合RFC 2047的格式,完美适配Google SMTP。
示例代码:
// 原始西里尔文主题 $original_subject = 'Тест розсилки'; // 用UTF-8编码+Base64格式生成符合要求的主题 $encoded_subject = mb_encode_mimeheader($original_subject, 'UTF-8', 'B'); // 或者用Quoted-Printable格式(两种格式Google SMTP都支持) // $encoded_subject = mb_encode_mimeheader($original_subject, 'UTF-8', 'Q');
生成后的编码主题大概是这样的:=?UTF-8?B?0J/RgNC40LLQtdGC0YHRgtC+0Lkg0L/RgNC40Y8=?=
把这个编码后的字符串作为邮件主题发送,Google SMTP就能正确识别并显示原始的西里尔文内容了。
额外注意事项
- 确保你的PHP环境已经开启
mbstring扩展(大部分主流服务器默认开启,如果没开需要在php.ini里启用); - 不要手动拼接MIME编码格式(比如自己写
=?UTF-8?B?...?=),内置函数会处理换行、长度限制等细节,避免出现意外问题; - 邮件正文的UTF-8编码是没问题的,保持你当前的配置即可。
内容的提问来源于stack exchange,提问作者Игорь Быстревский
相关产品推荐
相关产品推荐

