html 中的内联图像,base64,不会出现在 gmail 中(但会出现在 Thunderbird 中)

Posted

技术标签:

【中文标题】html 中的内联图像,base64,不会出现在 gmail 中(但会出现在 Thunderbird 中)【英文标题】:inline image in html, base64, doesn't appear in gmail (but does in thunderbird) 【发布时间】:2013-08-21 02:51:57 【问题描述】:

我正在从我的 gmail 帐户发送电子邮件。

我正在寻找最安全的跨客户端方式来发送内联消息,以便所有消息都显示内联图像。

在通过电子邮件发送带有内嵌图像的 html 时会出现问题:并非所有客户端/网络邮件都显示图像。我正在寻找一种针对客户或特定于客户的方法。

我正在使用 python,我可以控制标题和内容类型等。

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg=="  />

<div style="width: 80px; height: 80px; background:
url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAA
AAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==' ) no-repeat" />

使用以下 html 代码,图像是/不显示...:

Thunderbird 桌面客户端:一直显示 gmail 网络邮件:从未显示 yahoo webmail:通常 hotmail 网络邮件:很少 firefox + chrome - 作为 url:始终显示

我不知道它何时有效,何时无效(除了明显的语法或编码错误)。

到目前为止我做了什么:

尝试浏览器 URL(如上所述 - 它总是显示图像) 在所有这些客户端/网络邮件中打开“显示图像” 在所有这些客户端/网络邮件中打开“显示来自 xxxx 的图像” 已通过“查看消息来源”(或 gmail 的“显示原文”)确认 - 图片代码通常在那里。 从“查看源代码”和verified in js fiddle复制了相同的代码 添加了“utf-8”编码 我尝试使用文件附件而不是内联 base64 url​​ 发送图像。这种方法还有其他问题。

以 UTF-8 格式发送 html 消息 msgpart = MIMEText(body_html, "html", "utf-8")

通过几个选项更改了消息类型.. 现在是 MIMEMultipart("alternative") - 也许我应该使用另一种格式?

尝试使用 CSS 表示法和 IMG SRC 表示法(见上文)。并非始终支持 CSS 版本。

(以上示例取自***)

甚至可以将此行放在浏览器的 URL 中 - 它可以工作 - 即显示图像

gmail smpt 是否需要特殊参数?参数?

我猜如果邮件在 Thunderbird 中显示,它可能是正确发送的。

也许

【问题讨论】:

【参考方案1】:

据我所知,没有关于邮件用户代理(即您的邮件阅读器)必须如何处理内联图像的规则。测试中的“通常”结果是最令人不安的。

这不是您发送它们的方式,而是读者选择呈现它的方式。图形繁重的电子邮件具有click here to view as a web page 链接是有原因的,因为变化太多。我建议使用这条路线,或者只是将它们制作成多部分的 mime 附件,而忘记尝试可靠地内联它们。

【讨论】:

是的,我最终放弃了,转而使用 url 来存储在服务器上的图像 + 向用户发送他们应该“显示图像”的消息。 @BerryTsakala 我也放弃了,图像如何存储在服务器上并链接以显示在 body html 上?谢谢

以上是关于html 中的内联图像,base64,不会出现在 gmail 中(但会出现在 Thunderbird 中)的主要内容,如果未能解决你的问题,请参考以下文章

为网站使用内联/base64 图像比仅链接到硬文件快多少?

IE6:如何让内联 base64 图像与 IE6 一起使用?

使用 Summernote 在 Laravel 中动态内联附件

您可以将内联 base64 编码图像添加到 Mandrill 模板吗?

Base64 图像到 gmail

Swift 中的 Base64 编码不会在 Android 中解码