18

Sto utilizzando Ruby on Rails 3.1 e desidero aggiungere il mio logo del sito Web (ovvero un'immagine gestita tramite la nuova pipeline di asset) a un'e-mail.Rails 3.1: Problemi nella visualizzazione delle immagini nei file di visualizzazione mail

Se nel mio file vista mailer Premetto il seguente:

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

non funziona nella produzione modalità (vale a dire, non riesco a visualizzare l'immagine del logo) perché credo che gli usi Asset Pipeline la tecnica di impronte digitali e nella e-mail ricevuta non è così. Ispezione del logo elemento HTML nella e-mail ricevo qualcosa di simile:

<img src="http://www.mysitecom/images/logo.png"> # without Fingerprinting 

Come posso risolvere il problema?


Nel mio file production.rb Ho il seguente commentata codice:

# Enable serving of images, stylesheets, and javascripts from an asset server 
# config.action_controller.asset_host = "http://assets.example.com" 
+0

Avete trovato una soluzione a questo problema? – Fabio

+0

@Fabio - Devo ancora provare tutte le soluzioni proposte ... Ho provato alcuni di questi, ma nessuno lavora per me. – user502052

+0

@ user502052 questo potrebbe esserti utile http://api.rubyonrails.org/classes/ActionMailer/Base.html –

risposta

-3

Se si compila il vostro patrimonio:

RAILS_ENV=production bundle exec rake assets:precompile 

e utilizzare asset_path nella vista:

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

- dovrebbe funzionare sia nello sviluppo che nella produzione. Questo è il modo in cui faccio le mie visualizzazioni e i fogli di stile .css.scss.erb. Presumo che non faccia la differenza che sia una vista per un mailer.

+2

Non funziona per me. Genera il seguente codice HTML: '' (senza impronte digitali e nome host). – user502052

0

Hai provato l'aggiunta di qualcosa di simile

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

al file config/enviroments/production.rb

0

Prova:

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

Se il tuo 'logo.png' è nella root della cartella' images' se è in un'altra cartella all'interno di immagini come 'system' puoi aggiungere'/assets/system/logo.png' –

+0

o usare il 'asset_path'. come 'image_tag (@ root_url.to_s + asset_path ('logo.png'))' –

+0

La tua soluzione non funziona per me. – user502052

0

Stai dando image_tag un URL assoluto in modo che pensa che non lo fa è necessario fare qualsiasi impronta digitale o qualsiasi altra cosa diversa da rigurgitare la stringa che gli hai dato. Vorrei provare

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

Avrete anche bisogno di impostare ospite asset ActionController per arrivare binari per generare un URL completo per l'immagine, piuttosto che solo un percorso

Un avvertimento da notare: se si cambia l'immagine quindi l'impronta digitale cambierà ovviamente e quindi l'URL inage in tutte le email precedentemente inviate non sarà più valido.Si potrebbe desiderare di prendere in considerazione le immagini in linea, anche se ovviamente questi aumentano le dimensioni e-mail

0

provare questo uno

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

La tua soluzione non funziona per me. – user502052

-3

Assicurarsi che la pagina HTML hanno follwing intestazione

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

e rendono immagine come:

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

o

se si desidera link per immagine poi

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

@url = 'il tuo indirizzo del sito web'

+0

La tua soluzione non funziona per me. – user502052

+0

@ user502052 questo potrebbe aiutarti http://api.rubyonrails.org/classes/ActionMailer/Base.html –

+0

Non sono sicuro di cosa pensi che la dichiarazione doctype faccia per un tag semplice come questo: le immagini sono state visualizzate per un po 'quindi non è un problema con il browser (o client di posta) che rende la pagina in modo diverso –

2

Un'alternativa è quella di includere il logo immagine per posta. La posta potrebbe anche essere visualizzata offline. Puoi aggiungere il logo nella tua classe Mailer, con il seguente codice ..

attachments["your_logo.png"] = File.read("#{Rails.root}/assets/images/your_logo.png") 

Questo codice includerà l'immagine per posta. Credo che quando si desidera mostrare il vostro attaccamento nella mail è necessario effettuare le seguenti operazioni:

Class YourMailer < ActionMailer::Base 
def sendmail 
..... 
attachments.inline['your_logo.png'] = File.read("#{Rails.root}/assets/images/your_logo.png") 
end 

E secondo lei sendmail.html.erb è possibile utilizzare il metodo image_tag:

<%= image_tag attachments['your_logo.png'].url %> 

nota: se la posta non viene visualizzata correttamente, è possibile provare la soluzione a: Rails attachments inline are not shown correctly in gmail La posta può quindi essere visualizzata anche offline correttamente.

9

Tutte queste risposte sono supponendo che si sta utilizzando la pipeline di asset, ma dal vostro esempio, si sta specificando un'immagine in/images/pubbliche - questo non fa parte della pipeline di asset, in modo da tutte le risposte basate asset_path non funzionerà e la tua supposizione iniziale di impronte digitali non è corretta.

Se si mette l'immagine in/immagini pubbliche /, volete che il vostro tag di immagine per avere un src di http://yoursite.com/images/the-image.jpeg, nessuna impronta digitale, nessun percorso di asset, niente - solo hard-code nella tua vista:

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

Ma, devi effettivamente avere il file in quella posizione! Se hai la tua immagine in/app/assets/images, dovrai usare image_tag e la pipeline degli asset come altri hanno risposto.

25

in config/environments/production.rb (e altri file enviroment necessario) aggiungere:

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

dopo che Rails aggiungerà automaticamente nome host di fronte a percorsi generati da image_tag

# haml 
= image_tag 'foo.jpg' 

diventerà

#html 
<img alt="" src="http://mysite.com/assets/foo.jpg" > 

...stessa domanda per image_path

#haml 
%table#backgroundTable{background: image_path('email-background.jpg'), width: '100%', :border => "0", :cellpadding => "0", :cellspacing => "0"} 

diventerà

<table background="http://mysite.com/assets/email-background.jpg" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" width="100%"> 

guardare fuori !!!

# this will make your emails display images 
config.action_mailer.asset_host = 'http://mysite.com' 

è diverso da quello

# this wont make your email images work 
config.action_controller.asset_host = "http://mysite.com" 
+0

working on rails 3.2.13 – equivalent8

+0

Qualcuno sa se 'config.action_mailer.asset_host = 'website'' è abilitato di default in Rails 4? Cioè, hai solo bisogno di specificare tale opzione se vuoi che l'host della risorsa sia qualcosa di diverso dal dominio di root? – Justin

+0

Perché non è abilitato per impostazione predefinita? O almeno dovrebbe essere presente questa riga, config.action_mailer.asset_host, proprio come config.action_controller.asset_host is! Comunque, grazie amico! Funziona ;) –

-1

Aggiunta mode:'rb' ha lavorato per me:

attachments.inline['Logo.jpg'] = File.read(File.join(Rails.root,'app','assets','images','Logo.jpg'), mode: 'rb') 
Problemi correlati