Rails Action Mailer:电子邮件中的图像

时间:2014-03-04 20:44:17

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

我正在尝试将图片粘贴到电子邮件中。问题是电子邮件内部没有图像

development.rb

  config.action_mailer.default_url_options = {
    :host => 'localhost:3000',
    :only_path => false
  }
  config.action_mailer.raise_delivery_errors = false
  config.action_mailer.asset_host = 'http://localhost:3000'

查看文件:

<div class="image">
  <%= image_tag image_path('email-logo.png') %>
</div>

我在哪里弄错了?请询问您是否需要更多信息。

5 个答案:

答案 0 :(得分:18)

<div class="image">
  <%= image_tag('email-logo.png') %>
</div>

确保设置config.action_controller.asset_hostconfig.action_mailer.asset_host

答案 1 :(得分:8)

您正在发送来自localhost:3000的电子邮件,该电子邮件不公开(仅限于您的计算机)。

您必须公开本地环境,以便可以在邮件客户端中下载图像。

使用ngrok等服务公开您的本地域名。

完成后,请务必更换 config.action_mailer.asset_host = 'http://localhost:3000'

使用ngrok网址(类似config.action_mailer.asset_host = 'http://<xxx>.ngrok.com'

此外,在您的视图文件中,您必须确保为图像指定绝对URL(而不仅仅是相对路径)。您可以在此处详细了解:How do I get an absolute URL for an asset in Rails 3.1?

答案 2 :(得分:3)

如果您使用

image_url('e-mail-logo.png')

而不是

image_path()

它将呈现图像的绝对路径,这应该起作用。在消息的上下文中,图像的内部路径是没有意义的。

答案 3 :(得分:0)

我同意Utsav Kesharwani。 我最近遇到了同样的问题。由于localhost不公开,您无法访问localhost的图像。

因此,解决此问题的一个实际解决方案是将图像上传到云端,并在想要显示这些图像时访问它们。

我个人更喜欢Cloudinary - 基于云的服务,提供端到端的图像管理解决方案,包括上传,存储,操作,优化和交付。

您可以参考rails的Cloudinary文档:http://cloudinary.com/documentation/rails_integration#getting_started_guide

我希望这会有所帮助。

答案 4 :(得分:0)

我不是Rails专家,但是我找到了这个人:

  1. 将您的图像email-logo.png放入rails项目的公共文件夹中;
  2. 在您的电子邮件中(例如views / devise / mailer / my_email.html.erb,设置图像标签,如下所示:

    <%= image_tag("http://#{ActionMailer::Base.default_url_options[:host]}:#{ActionMailer::Base.default_url_options[:port]}/email-logo.png") %>