Action Mailer est un framework utilisé pour envoyer et recevoir des emails dans vos applications Ruby on Rails. Action Mailer utilise des concepts familiers - modèles et vues - pour gérer les messages.
Pour commecer, créons un nouveau modèle pour un mailer (“gestionnaire de courriers”).
$ script/generate mailer confirmation
Cela génère un nouveau modèle nommé confirmation. Dans ce modèle, des méthodes correspondantes à chaque email peuvent être définies, et dans chaque méthode, les attributs d'un message. Par exemple voici une méthode d'email typique:
# /app/models/confirmation.rb def thanks(email, name) recipients email from "no-reply@your_rails_app.com" subject "Thanks for signing up!" sent_on Time.now body :name => name end
Si vous devez passer des variables dans la vue du mailer, utiliser des symboles. Dans notre exemple, la valeur de la variable name sera accessible dans la vue à travers la variable d'instance @name.
Les pièces jointes sont faciles à ajouter. Dans le modèle, utilisez simplement la méthode attachment.
# /app/models/confirmation.rb def thanks(email, name) recipients email from "no-reply@your_rails_app.com" subject "Thanks for signing up!" sent_on Time.now body :name => name attachment :content_type => "application/pdf", :body => File.read("path.to.pdf") end
application/pdf avec le type MIME correspondant au fichier attaché.Lors de la création d'un modèle mailer, un nouveau répertoire est créé dans ./views. Le mailer utilise en effet des vues pour créer le contenu de vos emails et chaque méthode du modèle mailer doit avoir une vue correspondante.
# /views/confirmation/thanks.text.html.erb Hello <%= @name %>, Your account has been created.
Envoyer l'email est également trivial.
Confirmation.deliver_thanks("recpient@host", "John")
Cependant avant de pouvoir envoyer des emails, Action Mailer doit savoir comment l'envoyer et doit donc être configuré.
Action Mailer peut être configuré pour envoyer des emails de différentes façons, avec Sendmail ou SMTP par exemple.
Configurer Action Mailer pour envoyer des emails avec Sendmail est très simple. Créez d'abord un nouveau fichier dans ./config/initializers appelé mailer.rb.
# /config/initializers/mailer.rb ActionMailer::Base.delivery_method = :sendmail
Par défaut, Action Mailer s'attend à trouver Sendmail dans /usr/sbin/sendmail. Si ce n'est pas la localisation de Sendmail, ou si vous voulez spécifier d'autres paramètres, vous pouvez également le faire :
# /config/initializers/mailer.rb ActionMailer::Base.delivery_method = :sendmail ActionMailer::Base.sendmail_settings = { :location => "path/to/sendmail", :arguments => "-i" }
L'envoi d'emails à travers SMTP est tout aussi simple. Créez également un nouveau fichier mailer.rb dans ./config/intializers. Il s'agit de configurer Action Mailer pour qu'il puisse parler au serveur de messagerie.
# /config/initializers/mailer.rb ActionMailer::Base.delivery_method = :smtp ActionMailer::Base.smtp_settings = { :address => 'smtp.example.com', :port => 25, :domain => 'your.email.server', :authentication => :login, :user_name => 'user', :password => 'password' }
Discussion