2009-01-23 5 views
23

Comment créer et envoyer des emails à partir de l'application Rails, qui contient des images et un formatage correct? comme ceux que vous obtenez de facebook et aimez.Comment créer un email avec css et des images de Rails?

+0

Est-ce que ma réponse répond à votre question? –

+0

@bjeanes - Je n'ai pas vraiment eu le temps d'essayer cela car je suis occupé avec autre chose, mais il semble que votre solution soit dans le bon sens. Merci. Je vais essayer de mettre à jour. – Akshay

Répondre

31

En supposant que vous sachiez comment envoyer des e-mails normaux en texte brut à partir de Rails à l'aide d'ActionMailer, vous devez définir un type de contenu pour vos e-mails afin que les e-mails HTML fonctionnent.

Par exemple, votre notifer pourrait ressembler à ceci:

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 

Notez la ligne content_type "text/html". Cela indique à ActionMailer d'envoyer un e-mail avec un type de contenu de text/html au lieu de text/plain par défaut.

Ensuite, vous devez afficher les vues de votre expéditeur en sortie HTML. Par exemple, votre fichier de vue app/views/my_mailer/signup_notification.html.erb pourrait ressembler à ce qui suit:

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

Comme vous pouvez voir la vue HTML peut inclure une balise <style> pour définir des styles de base. Tous les HTML et CSS ne sont pas pris en charge, en particulier sur tous les clients de messagerie, mais vous devez avoir un contrôle de mise en forme suffisant sur les styles de texte.

L'incorporation d'images est un peu plus compliquée si vous prévoyez d'afficher des e-mails joints. Si vous incluez simplement des e-mails provenant de sites externes, vous pouvez utiliser une balise <img /> comme vous le feriez habituellement dans HTML. Cependant, de nombreux clients de messagerie bloqueront l'affichage de ces images jusqu'à ce que l'utilisateur les autorise. Si vous avez besoin d'afficher des images jointes, le plug-in Rails Inline Attachments peut être intéressant.

Pour plus d'informations sur le support de diffusion Rails, le ActionMailer documentation est une excellente ressource

+8

Juste une note: Gmail ** ne supportera pas ** CSS externe. Si vous souhaitez que CSS s'affiche correctement dans Gmail, vous devez utiliser des styles en ligne tels que '

text
.' – sscirrus

+2

Vous pouvez automatiquement intégrer les styles en utilisant Roadie: https://github.com/Mange/roadie –

+1

La gemme Premailer est également très agréable pour l'inline les styles. Il y a aussi un bijou appelé inline_css qui utilise Premailer pour le rendre très facile à utiliser dans vos modèles/mises en page d'e-mails. – scottwb

1

Pour les images que vous pouvez simplement utiliser l'aide image_tag normale après avoir défini le ActionMailer::Base.asset_host = 'http://www.your-domain.com'

J'utilise Paperclip pour stocker mes images Donc, dans mon cas, je peux ajouter une image à un email en utilisant cela.

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

Ceci est 'config.action_mailer.asset_host' maintenant – elsurudo

Questions connexes