我正在使用Ruby on Rails 3.1,我想将我的网站徽标(即通过新资产管道处理的图像)添加到电子邮件中。
如果在我的邮件程序视图文件中,我说明了以下内容:
<% # Note: '@root_url' is my application hostname (eg: http://www.mysite.com) %>
<%= link_to image_tag( "#{@root_url.to_s}/images/logo.png"), @root_url.to_s %>
它无法在生产模式下工作(也就是说,我无法显示徽标图像),因为我认为资产管道使用指纹技术并且在收到的电子邮件中它没有。检查电子邮件中的HTML徽标元素我得到这样的结果:
<img src="http://www.mysitecom/images/logo.png"> # without Fingerprinting
如何解决问题?
在我的production.rb
文件中,我有以下注释掉的代码:
# Enable serving of images, stylesheets, and javascripts from an asset server
# config.action_controller.asset_host = "http://assets.example.com"
答案 0 :(得分:29)
在config/environments/production.rb
(以及其他需要的环境文件)中添加:
config.action_mailer.asset_host = 'http://mysite.com'
之后,rails会自动在image_tag
# haml
= image_tag 'foo.jpg'
将成为
#html
<img alt="" src="http://mysite.com/assets/foo.jpg" >
...同样适用于image_path
#haml
%table#backgroundTable{background: image_path('email-background.jpg'), width: '100%', :border => "0", :cellpadding => "0", :cellspacing => "0"}
将成为
<table background="http://mysite.com/assets/email-background.jpg" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" width="100%">
小心!!!
# this will make your emails display images
config.action_mailer.asset_host = 'http://mysite.com'
与
不同# this wont make your email images work
config.action_controller.asset_host = "http://mysite.com"
答案 1 :(得分:9)
所有这些答案都假设您正在使用资产管道,但是从您的示例中,您在/ public / images中指定了一个图像 - 这不是资产管道的一部分,因此所有{{1}基于答案的答案是行不通的,而且你的初始指纹识别假设是不正确的。
如果您将图片放在/ public / images中,您希望图片代码的asset_path
src
,没有指纹,没有资产路径,什么都没有 - 只需将其硬编码到您的观点:
http://yoursite.com/images/the-image.jpeg
但是,你必须在该位置实际拥有该文件!如果你的图像在/ app / assets / images中,那么你需要使用image_tag和资产管道,就像其他人已经回答一样。
答案 2 :(得分:2)
另一种方法是在邮件中包含图像徽标。邮件也可以离线查看。您可以使用以下代码在Mailer类中添加徽标。
attachments["your_logo.png"] = File.read("#{Rails.root}/assets/images/your_logo.png")
此代码会将您的图片包含在邮件中。我相信当您想要在邮件中显示附件时,您需要执行以下操作:
Class YourMailer < ActionMailer::Base
def sendmail
.....
attachments.inline['your_logo.png'] = File.read("#{Rails.root}/assets/images/your_logo.png")
end
在sendmail.html.erb视图中,您可以使用image_tag方法:
<%= image_tag attachments['your_logo.png'].url %>
note :如果邮件没有正确显示,您也可以尝试以下解决方案: Rails attachments inline are not shown correctly in gmail 您的邮件也可以正常离线查看。
答案 3 :(得分:0)
您是否尝试过添加类似
的内容config.action_mailer.default_url_options = { :host => 'www.example.com' }
到您的config/enviroments/production.rb
文件
答案 4 :(得分:0)
尝试:
<%= link_to image_tag( "#{@root_url.to_s}/assets/logo.png"), @root_url.to_s %>
答案 5 :(得分:0)
你给image_tag一个绝对的网址,所以它认为它不需要做任何指纹或其他任何事情,除了回流你给它的字符串。我会试试
link_to( image_tag('logo.png'), @root_url)
您还需要设置actioncontroller的资产主机以获取rails以生成图像的完整URL而不仅仅是路径
需要注意的一点是:如果更改图像,则指纹显然会发生变化,因此以前发送的所有电子邮件中的中间网址都将无效。您可能希望考虑内嵌图像,但显然这些会增加电子邮件的大小
答案 6 :(得分:0)
试试这个
<%= link_to image_tag( asset_path, 'logo.png'), @root_url.to_s %>
答案 7 :(得分:-3)
如果您编译资产:
RAILS_ENV=production bundle exec rake assets:precompile
并在视图中使用asset_path:
<%= link_to image_tag( asset_path('logo.png') ), @root_url.to_s %>
- 它应该在开发和生产中都有效。这就是我的观点和.css.scss.erb样式表的方式。我认为它是一个邮件的视图没有区别。
答案 8 :(得分:-3)
确保您的html页面有以下标题
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
将图像渲染为:
<%= image_tag('http://'+@url+'/images/header.jpg')%>
或
如果你想要链接到图像
<%= link_to image_tag('http://'+@url+'/images/header.jpg'),root_path %>
@url ='您的网站地址'