Gmail API 仍然使用从 HTML 自动生成的替代正文部分替换 text/plain 替代正文部分

Posted

技术标签:

【中文标题】Gmail API 仍然使用从 HTML 自动生成的替代正文部分替换 text/plain 替代正文部分【英文标题】:Gmail API still replaces text/plain alternative body part with automatically generated one from HTML 【发布时间】:2020-02-07 10:04:02 【问题描述】:

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

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

Gmail API replaces text/plain alternative body part with automatically generated one from 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”。

【问题讨论】:

我在 2016 年报告的 GMail API 中发现了一个未解决的错误。issuetracker.google.com/issues/36760128 【参考方案1】:

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

您需要在邮件的text/plaintext/html 部分中添加纯文本内容BOTH

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

--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--

【讨论】:

对不起,我希望这两个部分不同。例如,假设 HTML 部分有一个广告——我不希望它出现在文本部分中。文本部分应具有绝对最少的内容。 HTML 电子邮件可能很花哨。 那么你可以把Hello html从text/plain部分去掉,但是你需要在text/html部分包含`Hello plain text`,否则就赢了'没有像你注意到的那样被包括在内。

以上是关于Gmail API 仍然使用从 HTML 自动生成的替代正文部分替换 text/plain 替代正文部分的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 gmail-api for python 发送 HTML 格式的电子邮件

带有 MimeKit、C# Winforms 和 Google API 的 Gmail 草稿(带附件的 HTML)

从 Gmail API 获取电子邮件的直接 URL(列出消息)

使用 Gmail API 从 Gmail 下载附件

Google 工作区:通过 API 激活 gmail

使用 Gmail api 通过 Android 应用发送邮件