J'essaie de configurer une application Rails afin que je puisse choisir entre différentes méthodes de livraison de courrier, selon que certaines conditions soient vraies ou non.
Ainsi, donnée deux méthodes de livraison: P>
class DeliveryMethodChooser def self.delivering_email(message) if some_condition # code to use mail delivery method foo else # code to use mail delivery method bar end end end
4 Réponses :
Donc, il s'avère que vous pouvez réellement passer un paramètre par défaut code> en tant que paramètre par défaut sur Il est donc pleinement possible de le faire: P > ActionMailer CODE>.
class SomeMailer < ActiveMailer::Base
default :delivery_method => Proc.new { some_condition ? :foo : :bar }
end
Vous pouvez passer une option: Delivery_Method à la méthode de la messagerie également:
def notification mail(:from => 'from@example.com', :to => 'to@example.com', :subject => 'Subject', :delivery_method => some_condition ? :foo : :bar) end
Oui, bien sûr, vous pouvez le faire, car vous pouvez définir une méthode de livraison par défaut à l'aide de la méthode code> par défaut code>, que j'ai expliquée dans ma réponse.
Notez que vous pouvez également ouvrir la configuration de l'application pour modifier de manière dynamique l'application de la méthode de livraison: Ceci peut être utile dans dB / graines.rb code > Si vous envoyez des courriels de confirmation de compte lors de la création de compte, par exemple. p> p>
Cela ne semble pas changer la méthode utilisée, cependant. Il signalera la nouvelle méthode via des rails.Application.config.action_mailer.delivery_method - mais utilisez toujours l'ancien (au moins pour moi)
Vous pouvez créer une sous-classe ActionMailer distincte et modifier la livraison_method + smtp_settings comme ceci:
class BulkMailer < ActionMailer::Base self.delivery_method = Rails.env.production? ? :smtp : :test self.smtp_settings = { address: ENV['OTHER_SMTP_SERVER'], port: ENV['OTHER_SMTP_PORT'], user_name: ENV['OTHER_SMTP_LOGIN'], password: ENV['OTHER_SMTP_PASSWORD'] } # Emails below will use the delivery_method and smtp_settings defined above instead of the defaults in production.rb def some_email user_id @user = User.find(user_id) mail to: @user.email, subject: "Hello #{@user.name}" end end
Quelles sont les deux méthodes de livraison que vous voulez?
Je ne vois pas vraiment comment cela est pertinent pour la question, mais l'un d'entre eux est: SMTP via SendGrid et l'autre utilisera Amazon SES (avec MailChimp STS).