首页 > 解决方案 > Gmail API 仍然使用从 HTML 自动生成的替代正文部分替换 text/plain 替代正文部分

问题描述

我正在使用 GMail API 发送 MIME 电子邮件。电子邮件的文本部分总是从 HTML 部分重新生成。

我尝试了 MIME 的各种变体以及我如何构建标题。几年前,另一个人报告了同样的问题:

Gmail API 将 text/plain 替代正文部分替换为从 HTML 自动生成的正文部分

如果我查看邮件的原件,邮件会在 GMail 界面的“已发送”项目中正确显示。但是,消息到达目的地时,文本部分被替换为 HTML 部分。我用几个目的地测试了它,包括雅虎邮箱。

输入多部分消息的相关部分是:

--0000000000d81f74059447a2ad02
Content-type: text/plain; charset=UTF-8

Hello plain text

--0000000000d81f74059447a2ad02
Content-type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<b>Hello html</b>

--0000000000d81f74059447a2ad02--

在目标 (Yahoo Mail) 查看原始消息显示:

--00000000000046bd1105948482e9
Content-Type: multipart/alternative; boundary="00000000000046bd0e05948482e7"

--00000000000046bd0e05948482e7
Content-Type: text/plain; charset="UTF-8"

*Hello html*

--00000000000046bd0e05948482e7
Content-Type: text/html; charset="UTF-8"

<b>Hello html</b>

--00000000000046bd0e05948482e7--

这是完整的测试用例,

https://gist.github.com/borisreitman/448e2699c267221ebbf430b64346baaa

请注意,文本部分现在包含“Hello html”,而不是原来的“Hello plain text”。

标签: gmail-apimime

解决方案


消息组合的正确语法令人困惑

您需要在消息的和部分中都传递纯文本内容。text/plaintext/html

修改您的代码消息正文如下,它将作为一个魅力:

--0000000000d81f74059447a2ad02
Content-type: text/plain; charset=UTF-8

Hello plain text

*Hello html*

--0000000000d81f74059447a2ad02
Content-type: text/html; charset=UTF-8

<div dir="ltr">Hello plain text<br><div><br></div><div><b>Hello html</b><br></div></div>

--0000000000d81f74059447a2ad02--

推荐阅读