ActionMailer 电子邮件图像在某些客户端中损坏

ActionMailer email images broken in some clients

我正在使用 ActionMailer 发送电子邮件,这些电子邮件包含图片。要在 staging/production 中包含我正在使用的 <%= image_tag('email-logo.png') %>config.action_controller.asset_host 的图像设置正确。

这些图像在 Outlook 中显示正常(我也在一些临时电子邮件服务中尝试过,它们也在那里工作),但在 Gmail、Apple Mail(桌面 + iOS)和邮箱应用程序。

电子邮件 HTML 版本的编码是 quoted-printable,对吗?

当我检查 Gmail 中的原始电子邮件时,图像的标记如下所示:

  <img alt=3D"Site Logo" class=3D"logo" src=3D"//staging.mysite.come/ass=
ets/email-logo-98e7cf6a48a4f2186ab9de2dcdfaa4bf0.png" style=3D"width: 30=
px; display: inline; vertical-align: middle;" />

当我删除 = 并在我的浏览器中加载 URL 时,它看起来很好。 = 会破坏它吗?会不会是图像中缺少协议URL?

提前感谢您的帮助!

=没有问题。它是 quoted-printable 编码中的 软换行符 ,用于符合 76 个字符的行长度,并在文本解码时将其删除并连接两行。有关详细信息,请参阅 wikipedia page on Quoted-printable

我怀疑 Gmail 无法预取图像。 Gmail 会尝试预取图像,然后从其安全代理服务器提供该图像。有关详细信息,请参阅 this official post。为此,图像需要具有可公开访问的 url。其他客户可能也会发生类似的事情。

所以这里可能会发生两件事:

  • Gmail(和其他客户端)不支持相对协议(或 "schemaless")url(他们可能会尝试 http 然后 https,但我不不知道他们是否这样做)。为了安全起见,我会使用完整的 url.
  • 该图片不可公开访问,即使使用 httphttps 尝试也是如此。您正在使用暂存环境,也许它受 http basic auth 保护? .come 作为 TLD 在 staging.mysite.come 中也很奇怪,但我认为这只是一个错字...