为什么图像标签在常规视图中工作,而不是邮件视图?

时间:2015-01-02 20:53:40

标签: ruby-on-rails email ruby-on-rails-4 html-email actionmailer

为什么以下代码在常规Rails视图(网页)上显示图像,但在邮件程序视图中使用时不显示图像(即我从应用程序发送的电子邮件)?图像位于/ app / assets / images中。

<%= image_tag "hr1.png" %>
<%= image_tag "pic_mountain.jpg" %>
<%= link_to image_tag("hr1.png", alt: "Sample alt text"), 'http://google.com' %>

作为跟进,这是将图像包含在发送给用户的html电子邮件中的最佳方式吗?我应该以某种方式存储图像www.url.com/images/sample_pic.jpg?如果是这样,你怎么做?我正在使用我创建的继承自ActionMailer的邮件程序。另外,这是Rails 4.1.6。谢谢!

1 个答案:

答案 0 :(得分:1)

您发布的ERB会生成

形式的html
<img src="/assets/hr1.png" />

(Iglorying资产摘要为简洁起见),即它只包含图像的路径,浏览器使用包含页面的主机和协议。

在电子邮件中,这不起作用,因为没有这样的主机。您可以将主机包含在网址中,也可以将图像添加为内嵌附件。

第一种方法最基本的方法是按照

的方式做一些事情
image_tag(image_url("foo", host: "example.com"))

您还可以在邮件上设置default_url_options,这样就不必反复这样做。

对于内嵌附件,您首先将图像添加为附件(在邮件中)

attachments.inline['foo.png'] = File.read(Rails.root.join("app", "assets", "images", "foo.png")

然后在您看来,您可以这样使用它:

<%= image_tag attachments['foo.png'].url -%>

请注意,这会将您的电子邮件转换为多部分电子邮件,因此您不应尝试将内容类型强制为text / html