2009-10-06 5 views
2

Je me demande s'il est possible de configurer un courriel Rails dérivé d'ActionMailer pour l'envoyer à un destinataire différent en fonction de l'environnement. Par exemple, pour le développement, je voudrais envoyer un courrier électronique à mon adresse e-mail personnelle afin de ne pas encombrer le compte de messagerie de notre société avec des e-mails de "test"; pour la production cependant je veux qu'il utilise la vraie adresse.Puis-je spécifier un autre destinataire pour un e-mail ActionMailer en fonction de l'environnement?

Comment puis-je y parvenir?

Répondre

6

Par défaut, l'environnement de développement n'est pas configuré pour envoyer des emails (il les enregistre simplement).

La configuration de comptes alternatifs peut être effectuée de différentes manières. Vous pouvez utiliser une certaine logique dans votre logiciel de messagerie comme si ...

recipients (Rails.env.production? ? "[email protected]" : "[email protected]") 

Ou vous pouvez définir le destinataire comme une constante dans les fichiers d'environnement comme ceci:

/config/environment/production.rb

EMAIL_RECIPIENT = "[email protected]" 

/config/environment/development.rb

EMAIL_RECIPIENT = "[email protected]" 

puis utilisez la constante dans votre mailer. exemple:

recipients EMAIL_RECIPIENT 
+0

Grande, qui devrait le faire. Merci! –

0

De plus, il existe plusieurs plugins qui font cela. Le meilleur que j'ai trouvé des trois que j'ai regardé était mail_safe.

7

Le plugin mail_safe peut être un peu trop puissant. Un initialiseur simple, fera

Rails 2.x

if Rails.env == 'development' 
    class ActionMailer::Base 
    def create_mail_with_overriding_recipients 
     mail = create_mail_without_overriding_recipients 
     mail.to = "[email protected]" 
     mail 
    end 
    alias_method_chain :create_mail, :overriding_recipients 
    end 
end 

Rails 3.x

if Rails.env == 'development' 

    class OverrideMailReciptient 
    def self.delivering_email(mail) 
     mail.to = "[email protected]" 
    end 
    end 

    ActionMailer::Base.register_interceptor(OverrideMailReciptient) 
end 
Questions connexes