Dans mon Rails 3 projet, je veux envoyer des courriels de notification simples. Je n'ai pas besoin de faire un modèle pour eux ou de faire une logique. Je veux juste les tirer de divers endroits dans le système.
Si je faisais cela dans un arbitraire Ruby Script, j'utiliserais poney . Cependant, j'aimerais toujours utiliser le Rails = Installations et configuration de messagerie, afin que je reçois la même fiabilité et la même configuration que j'ai pour le reste du courrier dans mon système.
Quel est le moyen le plus simple de faire cela? 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 en Rails 3 sans modèle consiste à appeler la méthode mail
ActionMailer::Base
directement suivi de la méthode deliver
,
Pour EX, ce qui suit enverrait un courrier électronique de 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 des idées sur la façon d'envoyer un email multipart/alternatif avec Texte/Pièces simples et HTML/HTML.
ICI est petit exemple de Rails GUIDES qui utilise render
méthode. Je n'ai pas essayé, mais si cela fonctionne comme render
Dans les cotrolers, vous pouvez simplement utiliser:
render :text => "Your message"
ou
render :text => my_message
Où my_message
est un paramètre.
Vous pouvez simplement l'envelopper dans une méthode que vous pouvez appeler de chaque endroit que vous souhaitez.
Dans cette version de Rails J'ai dû le faire comme ceci:
def raw_email( email, subject, body )
mail(
:to => email,
:subject => subject
) do |format|
format.text { render :text => body }
end
end
Rails 5 Les utilisateurs peuvent trouver la réponse acceptée (en utilisant format.text {...}
) Ne fonctionne pas; Au moins, je reçois une exception parce que Rails cherchait une vue.
Il y a une section dans le Rails Guide appelé Envoi d'emails sans rendu de modèle et tout il faut faire est de fournir: content_type et: options corporelles à 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