我正在尝试将图片粘贴到电子邮件中。问题是电子邮件内部没有图像
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>
我在哪里弄错了?请询问您是否需要更多信息。
答案 0 :(得分:18)
试
<div class="image">
<%= image_tag('email-logo.png') %>
</div>
确保设置config.action_controller.asset_host
和config.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专家,但是我找到了这个人:
在您的电子邮件中(例如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") %>