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

Gmail API发送含UTF-8特殊字符的HTML邮件时特殊字符被替换为问号的问题求助

Gmail API发送含UTF-8特殊字符的HTML邮件时特殊字符被替换为问号的问题求助

最近我把GCP上的Java云应用从用sendmail改成通过Gmail API发送邮件到Google Workspace,之前发送带UTF-8格式的HTML邮件和特殊字符都没问题,但现在遇到了头疼的问题——Google把特殊字符替换成了字面意义的问号?。

我已经做了两步验证:

  • 调用Gmail API发送前,检查过邮件内容里的特殊字符都是正常存在的;
  • 邮件通过Gmail发送到客户端后,查看原始消息文本发现特殊字符已经被替换成了?,而且所有设备和邮件客户端都显示这个状态,因为这些问号是实打实的字面字符,不是编码问题导致的乱码。

我的HTML邮件头部已经加了指定UTF-8的meta标签:

<head> 
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
</head>

出问题的特殊字符包括弯引号(左双引号、右双引号)和 stylized 撇号,比如这段内容:

<p>“Must’ve been fate, you and I.”</p>

经过Gmail API处理后变成了:

<p>?Must?ve been fate, you and I.?</p>

下面是我调用Gmail API的Java代码片段:

MimeMessage email = new MimeMessage(session);
// ... 其他邮件属性设置步骤
email.setSubject(subject);
email.setContent(htmlBodyText, "text/html");
// ... 其他邮件属性设置步骤

ByteArrayOutputStream buffer = new ByteArrayOutputStream();
email.writeTo(buffer);
byte[] rawMessageBytes = buffer.toByteArray();
String encodedEmail = Base64.encodeBase64URLSafeString(rawMessageBytes);

Message message = new Message();
message.setRaw(encodedEmail);
// ... 其他Message属性设置步骤

message = service.users().messages().send(myEmailAddress, message).execute();

有没有大佬能给点解决建议?


UPDATE:补充Thunderbird邮件客户端收到的原始消息源作为参考:

--0000000000002d8e4006346347a4
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<html>
<head>
 =20
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3DUTF-8"=
 >
</head>
<body>
<div style=3D"padding:10px 15% 10px 15%;text-align:center;font-family:&amp;#=
39;Open Sans&amp;#39;,Helvetica,Arial,sans-serif">

<div style=3D"width:100%;height:100px;background-color:black;margin-bott=
om:20px;color:white;text-align:center;vertical-align:bottom;display:inline-=
block;font-family:WeezerFont,Verdana,&amp;#39;Open Sans&amp;#39;,Helvetica,Arial,sa=
ns-serif;padding-top:10px;padding-bottom:10px;padding-top:10px">
</div>

<div style=3D"width:100%;height:100px;margin-bottom:20px;text-align:c=
enter;vertical-align:bottom;display:inline-block;font-family:WeezerFont,Ver=
dana,&amp;#39;Open Sans&amp;#39;,Helvetica,Arial,sans-serif">
</div>
<h2>Test Email Message</h2>
<p>?Must?ve been fate, you and I.?</p>

<p>

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin con=
sectetur mauris ac placerat consequat. Nulla dictum libero mi, ac tempor neque tincidunt vitae. Quisque sagitti=
s dignissim erat non accumsan. Cras eget mauris orci. Proin sed ullamcorper metus. Donec ut turpis vitae er=
os consequat egestas vitae ac mi. Duis tristique ipsum dictum diam imperdiet, tempus sagittis ante ultric=
ies. In hac habitasse platea dictumst. Sed consectetur imperdiet turpis, vel consequat ex malesuada vel. Inte=
ger ut mauris metus. Phasellus eleifend sollicitudin est et posuere. Nam cursus sapien quis erat tincidunt=
pharetra. Praesent id neque ut felis scelerisque aliquam. Nunc gravida ac erat quis dignissim.
</p>
</div>

</body>
</html>
--0000000000002d8e4006346347a4--

求各位大佬给点解决思路!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 14:59:51