L’une des grandes mises à jour de Rails 3 est la nouvelle API Action Mailer.
Petit rappel : dans les versions précédentes de Rails, nous pouvons transmettre des emails en créant, dans le répertoire app/models un modèle ActionMailer.
Celui-ci pourrait ressembler (dans rails 2.3) à ceci :
class UserMailer < ActionMailer::Base
def welcome_email(user)
recipients user.email
from "I'm nobody <42@unknown>"
subject "Hello World"
body {:user => user }
end
end
Et dans le répertoire app/views/user_mailer, nous pourrons créer un fichier welcome_email.text.erb qui sera le contenu de notre email.
Maintenant supposons que nous désirions attacher une pièce jointe à notre email.
Nous allons devoir ajouter dans notre méthode welcome_email cette pièce jointe.
attachment "application/pdf" do |a|
a.body = contenu_du_pdf()
end
un « beurk » suffira !
Dans Rails 3, notre méthode d’envoi d’email devient la suivante :
class UserMailer < ActionMailer::Base
default :from => "I'm nobody <42@unknown>"
def welcome_email(user)
@user = user
mail(:to => user.email, :subject => "Hello World")
end
end
Et lorsque nous souhaitons ajouter une pièce jointe, nous n’avons qu’à faire :
attachments['terms.pdf'] = {:content => contenu_du_pdf() }
C’est déjà plus sympa.
Mais ce n’est pas tout ! Par défaut, les fichiers welcome_mail.text.erb et welcome_mail.html.erb sont inclus dans le mail.
Ainsi la personne recevant l’email peut le lire en html ou en texte.
Mais tout comme vous le faites dans vos contrôleurs pour l’html, le json, l’xml ou tout autre format, vous pouvez vouloir rendre quelque chose de différent en fonction du format html ou texte du mail.
Go !
mail(:to => user.email, :subject => "Hello World") do |format|
format.text { render :text => "Mon email est en texte" }
format.html { render :html => "Mon email est en <strong>HTML</strong>" }
end
Pour continuer lorsque vous envoyiez votre email, vous faisiez cela de la manière suivante :
UserMailer.deliver_welcome_email(@user)
Vous devrez maintenant faire :
UserMailer.welcome_email(@user).deliver
Le welcome_email vous renvoyant un objet Mail que vous pouvez ainsi modifier comme bon vous semble.
Voir le stocker pour l’envoyer plus tard par exemple.
Si vous désirez plus d’informations concernant cette nouvelle API, je vous recommande l’article sur guides.rails.info (encore en cours de rédaction).
Et le gist qui a servi de spécification pour cette nouvelle API.





