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.
- 该图片不可公开访问,即使使用
http
或 https
尝试也是如此。您正在使用暂存环境,也许它受 http basic auth 保护? .come
作为 TLD 在 staging.mysite.come
中也很奇怪,但我认为这只是一个错字...
我正在使用 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. - 该图片不可公开访问,即使使用
http
或https
尝试也是如此。您正在使用暂存环境,也许它受 http basic auth 保护?.come
作为 TLD 在staging.mysite.come
中也很奇怪,但我认为这只是一个错字...