2012-03-14 10 views
11

Nel mio ambiente di sviluppo, utilizzo una copia del database di produzione durante il test locale. Per motivi sia di test che semplicemente di protezione dall'invio di email di prova/dev agli utenti reali, qual è il modo migliore per ignorare l'indirizzo di posta elettronica quando si è in modalità sviluppo?Ignora la posta di ActionMailer all'indirizzo nell'ambiente di sviluppo

So che posso scrivere la logica in ogni mailer, ma ne ho diversi e sarebbe bello mettere tutto in una volta. Posso sovrascrivere in qualche modo il metodo mail() per fare in modo che il parametro :to punti a un indirizzo di posta elettronica specificato?

risposta

1

È could do un default di

class UserMailer < ActionMailer::Base 
    default :to=> "[email protected]" 
end 

e poi fare l'indirizzo un'opzione nei metodi. In questo modo verrà automaticamente impostato su :to. Un'altra idea che avevo era un po 'di più:

class UserMailer < ActionMailer::Base 
    attr_accessor :email_address 

    def initialize 
    if RAILS_ENV == "development" 
     @email_address = "[email protected]" 
    end 
    end 
end 

che richiederebbe di impostare un nuovo indirizzo nel codice, ma che sarebbe stato sovrascritto ogni volta nello sviluppo.

3

Quello che mi piace fare è configurare l'azione mailer nell'ambiente di sviluppo di utilizzare mailtrap.

27

Uso un ActionMailer interceptor in modo che tutti i messaggi inviati durante lo sviluppo o gli ambienti di test vengano inviati allo stesso indirizzo. Così:

# config/initializers/override_mail_recipient.rb 
if Rails.env.development? or Rails.env.test? 
    class OverrideMailRecipient 
    def self.delivering_email(mail) 
     mail.to = '[email protected]' 
    end 
    end 
    ActionMailer::Base.register_interceptor(OverrideMailRecipient) 
end 
+0

Questo è abbastanza carino in realtà. Grazie per il frammento! – Calvin

Problemi correlati