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

通过Microsoft Graph创建M365邮件时ISO-8859-2编码HTML渲染异常求助

解决方案

方法1:通过internetMessageContent将原始MIME内容存入指定文件夹

你提到MIME格式导入可正常渲染但无法放入指定文件夹,其实可以利用POST /beta/users/{user-id}/mailFolders/{folder-id}/messages端点结合internetMessageContent字段实现:

  1. 把完整的RFC822格式MIME邮件(需包含Content-Type: text/html; charset=ISO-8859-2头信息和原始HTML内容)转换为Base64编码字符串。
  2. 构造如下JSON请求体:
{
  "internetMessageContent": {
    "contentType": "message/rfc822",
    "content": "BASE64_ENCODED_MIME_CONTENT"
  }
}
  1. 发送POST请求到目标文件夹的消息端点,邮件会完整存入指定文件夹,且保留原始编码规则,渲染显示正常。

方法2:正确转换编码后使用body字段构造邮件

若你仍想使用body字段,需先将ISO-8859-2编码的HTML做正确编码转换:

  • 将ISO-8859-2编码的HTML字节流解码为Unicode字符串(比如通过代码bytes.fromhex("E1").decode("iso-8859-2")可得到正确的á字符)。
  • 把该Unicode字符串直接作为body.content的值,保留原HTML中的<meta charset="ISO-8859-2">标签无需修改。
  • 请求体示例:
{
  "subject": "测试主题",
  "body": {
    "contentType": "html",
    "content": "<html><head><meta charset=\"ISO-8859-2\"></head><body>Zápis GDPR</body></html>"
  }
}

这种方式下,Graph以UTF-8处理JSON内容,但解码后的Unicode字符是正确的,邮件客户端会根据meta标签识别字符集,最终显示正常。

关键注意事项

  • 禁止直接将ISO-8859-2字节当作UTF-8字符串传入,这会导致你遇到的0xE1被错误转为c4 8f这类乱码问题。
  • 确保请求头的Content-Type设置为application/json; charset=utf-8,保证JSON本身的编码正确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:11:28