为什么以下代码在常规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。谢谢!
答案 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