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/plain
和text/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)