18

我正在使用Ruby on Rails 3.1,並且希望將我的網站徽標(即通過新資產管道處理的圖像)添加到電子郵件中。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 %> 

它不生產模式下工作(也就是,我不能顯示標誌圖像),因爲我覺得資產管道用途Fingerprinting技術和收到的電子郵件中沒有。檢查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

你有沒有發現任何解決這個問題? – Fabio

+0

@Fabio - 我仍然嘗試所有提出的解決方案......我測試了其中一些,但沒有人爲我工作。 – user502052

+0

@ user502052這可能對你有幫助http://api.rubyonrails.org/classes/ActionMailer/Base.html –

回答

-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樣式表。我認爲這是一個郵件視圖沒有什麼不同。

+2

它不適合我。它生成以下HTML代碼:''(沒有指紋和主機名)。 – user502052

0

您是否嘗試過加入這樣的事情

config.action_mailer.default_url_options = { :host => 'www.example.com' } 

config/enviroments/production.rb文件

0

嘗試:

<%= link_to image_tag("#{@root_url.to_s}/assets/logo.png"), @root_url.to_s %> 
+0

如果您的'logo.png'文件夾位於'images'文件夾的根目錄下,如果它位於'system'等圖像內的其他文件夾中,您可以添加'/ assets/system/logo.png' –

+0

或使用'asset_path'像'image_tag(@ root_url.to_s + asset_path('logo.png'))' –

+0

您的解決方案對我無效。 – user502052

0

你給IMAGE_TAG絕對URL,因此認爲它不需要做任何指紋或其他任何事情,而不是反芻你給它的字符串。我會嘗試

link_to(image_tag('logo.png'), @root_url) 

您還需要如下設置:ActionController的資產主讓rails來生成圖像完整的URL,而不僅僅是一個路徑

一個警告要注意:如果你改變形象那麼指紋將明顯改變,因此之前發送的所有電子郵件中的網頁URL都將失效。您不妨考慮內嵌圖像,雖然很明顯,這些增加的郵件大小

0

試試這一個

<%= link_to image_tag(asset_path, 'logo.png'), @root_url.to_s %> 
+0

您的解決方案對我無效。 – user502052

-3

確保你的HTML頁面都follwing頭

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> 

和渲染圖像:

<%= image_tag('http://'[email protected]+'/images/header.jpg')%> 

如果你想鏈接到圖片,然後0

<%= link_to image_tag('http://'[email protected]+'/images/header.jpg'),root_path %> 

@url =「你的網站地址」

+0

您的解決方案對我無效。 – user502052

+0

@ user502052這可能對你有幫助http://api.rubyonrails.org/classes/ActionMailer/Base.html –

+0

我不確定你認爲doctype聲明會爲像這樣的簡單標籤做些什麼 - 圖片已經出現一段時間,所以它不是瀏覽器(或郵件客戶端)以不同的方式渲染頁面的問題 –

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 %> 

注意:如果郵件沒有正確顯示,您可以選擇嘗試以下解決方案: Rails attachments inline are not shown correctly in gmail 您的郵件也可以正確脫機查看。

9

所有這些答案都假設您正在使用資產管道,但在您的示例中,您將在/ public/images中指定圖像 - 這不是資產管道的一部分,因此所有基於asset_path的答案將無法工作,並且進一步您的初始指紋假設是不正確的。

如果你把/公/圖像的圖像,你希望你的形象標籤有一個的http://yoursite.com/images/the-image.jpegsrc,無指紋,無資產路徑,什麼 - 只是它硬編碼到您的看法:

<img src="<%[email protected]_url%>/images/logo.png"> 

但是,您必須在該位置真正擁有該文件!如果您的圖片位於/ app/assets/images中,則需要使用image_tag和資產管道,正如其他人已經回答的那樣。

25
config/environments/production.rb(以及其它所需的環境文件)添加

config.action_mailer.asset_host = 'http://mysite.com' 

該導軌通過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" 
+0

在rails上工作3.2.13 – equivalent8

+0

有誰知道'config.action_mailer.asset_host ='website''默認在Rails 4中啓用嗎?也就是說,如果您希望資產主機不是根域,那麼您是否只需要指定該選項? – Justin

+0

爲什麼默認不啓用?或者至少應該出現這一行config.action_mailer.asset_host,就像config.action_controller.asset_host是!無論如何,謝謝你的男人!有用 ;) –

-1

添加mode:'rb'工作對我來說不同:

attachments.inline['Logo.jpg'] = File.read(File.join(Rails.root,'app','assets','images','Logo.jpg'), mode: 'rb') 
相關問題