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

通过Gmail API发送邮件时主题含撇号出现乱码问题咨询

问题原因
  • 这是典型的邮件头非ASCII字符编码不符合RFC 2047规范导致的乱码:你看到的’是UTF-8编码的右单引号’(Unicode编码U+2019,对应UTF-8字节为0xE2 0x80 0x99)被接收端按Latin-1(单字节编码)解析的结果。
  • 邮件头字段(包括Subject主题、发件人/收件人显示名等)的编码规则独立于邮件正文,不允许直接插入非ASCII字符,必须按照MIME编码字格式转码后才能使用;而正文的编码受Content-Type指定的charset约束,所以正文的撇号可以正常显示。
  • 你当前直接将带Unicode字符的Subject拼接进原始邮件头,且指定的charset为us-ascii,本身就不支持’这类扩展字符,最终导致解析乱码。
  • SMTP发送正常是因为大部分SMTP客户端会自动帮你处理邮件头的编码逻辑,而你手动拼接原始邮件头调用API时遗漏了这一步。
解决方案
  • 对所有包含非ASCII字符的邮件头字段(主题、收发件人显示名等)做RFC 2047编码,以Subject为例,C#中可以用如下方式处理:
// 按UTF-8+B64格式生成符合RFC2047的主题编码
string encodedSubject = "=?utf-8?B?" + Convert.ToBase64String(Encoding.UTF8.GetBytes(Subject)) + "?=";
// 拼接邮件头时用encodedSubject替换原Subject变量
"Subject: " + encodedSubject + " \r\n"
  • 不建议手动拼接原始邮件头,可直接使用.NET内置的System.Net.Mail.MailMessage类构造邮件对象,框架会自动完成所有邮件头、正文的编码合规处理,再导出为原始eml字符串做Base64编码即可。
  • 确认commonFunction.Base64UrlEncode方法处理msg参数时,是将字符串按UTF-8编码转为字节流后再做Base64编码,不要使用系统默认编码。
  • 邮件正文的Content-Type charset配置无需修改,保持和实际正文编码一致即可。

内容的提问来源于stack exchange,提问作者rajesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 12:00:00