【问题标题】:Why do image tags work in regular views but not mailer views?为什么图像标签在常规视图中有效,而在邮件视图中无效?
【发布时间】:2015-03-01 03:41:54
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

您发布的 ERB 生成表单的 html

<img src="/assets/hr1.png" />

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

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

第一种最基本的方法是按照以下方式做一些事情

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

【讨论】:

  • 指定主机似乎不起作用;但是,在我从对 mail 方法的调用中删除 content_type: text/html 选项后,有关 attachments.inline 的第二个建议确实有效。这是主要问题。另外,我指定了这样的文件路径,而不是 attachments.inline['pic_mountain.jpg'] = File.read("app/assets/images/pic_mountain.jpg")
  • 啊,对,url版本出错了
猜你喜欢
  • 2022-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
相关资源
最近更新 更多