You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者Игорь Быстревский

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:19:25