2009-01-23 8 views
23

Come si creano e si inviano e-mail dall'applicazione Rails, che contengono immagini e una formattazione corretta? come quelli che ricevi da facebook e simili.Come posso creare e-mail con css e immagini da Rails?

+0

La mia risposta risponde alla tua domanda? –

+0

@bjeanes - Non ho davvero avuto il tempo di provarlo mentre mi sono occupato con qualcos'altro, ma sembra che la soluzione sia sulla linea giusta. Grazie. Cercherò di aggiornare. – Akshay

risposta

31

Supponendo che tu sappia come inviare normali messaggi di testo in chiaro da Rails utilizzando ActionMailer, per ottenere email HTML che funzionano è necessario impostare un tipo di contenuto per la tua e-mail.

Ad esempio, il Notifer potrebbe assomigliare a questo:

class MyMailer < ActionMailer::Base 
    def signup_notification(recipient) 
    recipients recipient.email_address_with_name 
    subject  "New account information" 
    from   "[email protected]" 
    body   :user => recipient 
    content_type "text/html" 
    end 
end 

Nota la linea content_type "text/html". Ciò indica ad ActionMailer di inviare un messaggio di posta elettronica con un tipo di contenuto di text/html anziché il valore predefinito text/plain.

Quindi è necessario rendere l'output delle viste del proprio mailer HTML. Ad esempio, il file di vista app/views/my_mailer/signup_notification.html.erb potrebbe essere simile alla seguente:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 

<html lang="en"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    <style type="text/css" media="screen"> 
     h3 { color: #f00; } 
     ul { list-style: none; } 
    </style> 
</head> 
<body> 
    <h3>Your account signup details are below</h3> 
    <ul> 
    <li>Name: <%= @user.name %></li> 
    <li>Login: <%= @user.login %></li> 
    <li>E-mail: <%= @user.email_address %></li> 
    </ul> 
</body> 
</html> 

Come si può vedere la vista HTML può includere un tag <style> per definire stili di base. Non tutti gli HTML e CSS sono supportati, in particolare su tutti i client di posta, ma è necessario disporre di un controllo di formattazione sufficiente rispetto agli stili di testo.

L'incorporamento di immagini è un po 'più complicato se si prevede di visualizzare le e-mail allegate. Se si includono semplicemente e-mail da siti esterni, è possibile utilizzare un tag <img /> come si farebbe di solito in HTML. Tuttavia, molti client di posta bloccheranno la visualizzazione di queste immagini finché l'utente non la autorizza. Se hai bisogno di visualizzare immagini allegate, il plug-in Rails Inline Attachments potrebbe valere la pena dare un'occhiata.

Per ulteriori informazioni sulla mailing supporto Rails, il ActionMailer documentation è una grande risorsa

+8

Solo una nota: Gmail ** non supporterà ** CSS esterni. Se vuoi che i CSS vengano visualizzati correttamente in Gmail devi usare gli stili in linea come '

text
.' – sscirrus

+2

Puoi allineare automaticamente gli stili usando Roadie: https://github.com/Mange/roadie –

+1

La gemma di Premailer è anche molto bella per l'inlining gli stili. C'è anche una gemma chiamata inline_css che usa Premailer per renderlo super facile da usare nei modelli di email/layout. – scottwb

1

Per le immagini si può semplicemente utilizzare il normale image_tag aiutante dopo aver definito il ActionMailer::Base.asset_host = 'http://www.your-domain.com'

Io uso Paperclip per memorizzare le mie immagini quindi nel mio caso posso aggiungere un'immagine a un'email usando questo.

image_tag result.photo.url(:small) 
+0

Questo è 'config.action_mailer.asset_host' ora – elsurudo

Problemi correlati