2009-01-23 1 views
23

Wie erstellen und senden Sie E-Mails aus Rails-Anwendungen, die Bilder und korrekte Formatierung enthalten? wie die, die du von Facebook bekommst und magst.Wie erstelle ich E-Mails mit CSS und Bildern von Rails?

+0

beantwortet meine Antwort Ihre Frage? –

+0

@bjeanes - Ich habe nicht wirklich die Zeit, dies zu versuchen, da ich mit etwas anderem beschäftigt bin, aber scheint, dass Ihre Lösung auf der richtigen Linie ist. Vielen Dank. Wird versuchen und aktualisieren. – Akshay

Antwort

31

Angenommen, Sie wissen, wie Sie normale Nur-Text-E-Mails von Rails mit ActionMailer senden, um HTML E-Mails funktionieren zu lassen, müssen Sie einen Inhaltstyp für Ihre E-Mail festlegen.

Zum Beispiel Ihre notifer könnte wie folgt aussehen:

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 

Notiere die content_type "text/html" Linie. Dadurch wird ActionMailer angewiesen, anstelle des Standardwerts text/plain eine E-Mail mit dem Inhaltstyp text/html zu senden.

Als nächstes müssen Sie Ihre Mailer-Ansichten Ausgabe HTML. Zum Beispiel Ihrer Ansicht Datei app/views/my_mailer/signup_notification.html.erb könnte wie folgt aussehen:

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

Wie Sie das sehen können HTML Ansicht, die einen <style> Tag definieren grundlegende Stile umfassen kann. Nicht alle HTML und CSS werden unterstützt, insbesondere über alle E-Mail-Clients hinweg, aber Sie sollten über ausreichende Formatierungssteuerung für Textstile verfügen.

Das Einbetten von Bildern ist ein wenig trickreich, wenn Sie angehängte E-Mails anzeigen möchten. Wenn Sie einfach E-Mails von externen Websites einbinden, können Sie ein <img />-Tag wie gewohnt in HTML verwenden. Viele E-Mail-Clients blockieren jedoch die Anzeige dieser Bilder, bis der Benutzer sie autorisiert. Wenn Sie angehängte Bilder anzeigen müssen, ist das Rails-Plug-In Inline Attachments möglicherweise einen Blick wert.

Weitere Informationen über Rails Mailing-Unterstützung, ist die ActionMailer documentation eine große Ressource

+8

Nur ein Hinweis: Google Mail ** ** unterstützt kein externes CSS. Wenn Sie möchten, dass CSS in Google Mail richtig angezeigt wird, müssen Sie Inline-Stile wie '

text
.' verwenden. – sscirrus

+2

Sie können die Stile automatisch mit Roadie inline: https://github.com/Mange/roadie –

+1

Das Premailer-Juwel ist auch sehr schön für Inlining die Stile. Es gibt auch ein Juwel namens inline_css, das Premailer verwendet, um es sehr einfach in E-Mail-Vorlagen/Layouts zu verwenden. – scottwb

1

Für die Bilder können Sie nur die normalen image_tag Helfer verwenden, nachdem Sie die ActionMailer::Base.asset_host = 'http://www.your-domain.com' definiert haben

I Büroklammer verwenden, um meine Bilder zu speichern In meinem Fall kann ich damit ein Bild zu einer E-Mail hinzufügen.

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

Dies ist 'config.action_mailer.asset_host' jetzt – elsurudo

Verwandte Themen