ruby-on-rails - tutorial - ruby site du zero pdf




Comment puis-je envoyer un courrier avec des rails sans modèle? (3)

Dans mon projet Rails 3, je veux envoyer des emails de notification simples. Je n'ai pas besoin de faire un modèle pour eux ou faire de la logique. Je veux juste les renvoyer de divers endroits du système.

Si je faisais cela dans un script de ruby ​​arbitraire j'utiliserais pony . Cependant, je voudrais toujours utiliser les installations et la configuration du courrier, de sorte que j'obtienne la même fiabilité et la même configuration que pour le reste du courrier dans mon système.

Quelle est la manière la plus simple de le faire? Idéalement, il y aurait une méthode comme

ActionMailer.send(:to => '[email protected]', :subject =>"the subject", :body =>"this is the body")

Le moyen le plus simple d'envoyer du courrier dans les rails 3 sans un template est d'appeler directement la méthode mail d' ActionMailer::Base suivie de la méthode deliver ,

Par exemple, ce qui suit enverrait un e-mail en texte brut:

ActionMailer::Base.mail(from: "[email protected]", to: "[email protected]", subject: "test", body: "test").deliver

http://api.rubyonrails.org/classes/ActionMailer/Base.html#method-i-mail vous donne toutes les options d'en-tête et aussi des idées sur la façon d'envoyer un email multipart / alternative avec text / plain et text / html pièces directement.


Rails 5 utilisateurs peuvent trouver la réponse acceptée (en utilisant format.text {...} ) ne fonctionne pas; Au moins, je recevais une exception parce que Rails cherchait une vue.

Il s'avère qu'il y a une section dans le Guide des Rails appelée Envoi d'emails sans Template Rendering et tout ce qu'il faut faire est de fournir: content_type et: body options to mail() . Par exemple:

class UserMailer < ApplicationMailer
  def welcome_email
    mail(to: params[:user].email,
         body: params[:email_body],
         content_type: "text/html",
         subject: "Already rendered!")
  end
end

Here petit exemple de Rails Guides qui utilise la méthode render . Je ne l'ai pas essayé, mais si cela fonctionne comme render dans Cotrollers, alors vous pouvez simplement utiliser:

render :text => "Your message"

ou

render :text => my_message

my_message est un paramètre.

Vous pouvez juste l'envelopper dans une méthode que vous pouvez appeler de tous les endroits que vous voulez.

Rails mis à jour 3.2.8

Dans cette version de Rails, je devais le faire comme ceci:

def raw_email( email, subject, body )
  mail(
    :to => email,
    :subject => subject
  ) do |format|
    format.text { render :text => body }
  end
end






actionmailer