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

使用Gmail API和MimeKit发送邮件时出现Â异常字符问题

解决Gmail API发送邮件时签名中出现Â字符的问题

问题原因

出现Â字符的核心是编码处理错误:从Gmail获取的签名包含Unicode不间断空格(U+00A0),当前代码通过mimeMsg.ToString()将MIME邮件转为字符串,再转UTF-8字节进行Base64编码的过程中,破坏了原始编码信息,导致非标准字符被错误解析为Â。

解决方案

直接使用MimeKit的WriteTo方法输出原始字节流,跳过字符串转换环节,确保编码一致性。

修改后的关键代码

// 替换原有的msg.Raw生成逻辑
using var stream = new MemoryStream();
mimeMsg.WriteTo(stream);
stream.Position = 0;
var messageBytes = stream.ToArray();
msg.Raw = Base64UrlEncode(messageBytes);

// 同步修改Base64UrlEncode方法,直接接收字节数组
string Base64UrlEncode(byte[] input)
{
    return Convert.ToBase64String(input)
        .Replace("+", "-")
        .Replace("/", "_")
        .Replace("=", "");
}

额外优化(可选)

如果签名中存在大量非标准空格,可在获取签名后替换为普通空格,进一步避免编码歧义:

// 在DoAuthenticationAsync方法中获取签名后添加
mySignature = itm.Signature.Replace("\u00A0", " ");

原理说明

  • MimeKit的WriteTo方法会严格按照MIME规范输出编码后的字节流,避免字符串转换时的编码丢失或错误。
  • 直接基于原始字节进行Base64Url编码,确保Gmail API接收到的内容完全符合要求,不会出现乱码字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:55:10