Anular el correo de ActionMailer para abordar en el entorno de desarrollo

En mi entorno de desarrollo, uso una copia de la base de datos de producción al realizar pruebas locales. Por razones tanto para realizar pruebas como para proteger contra el envío de correos electrónicos de prueba / desarrollo a usuarios reales, ¿cuál es la mejor manera de anular la dirección de correo electrónico en el modo de desarrollo?

Sé que puedo escribir la lógica en cada correo, pero tengo varios y sería bueno ponerlo todo en un solo lugar. ¿Puedo anular el método mail() alguna manera para hacer que :to parametro siempre apunte a una dirección de correo electrónico que especifique?

Creo que la mejor opción es usar un servicio como mailtrap.io: http://mailtrap.io o mailcatcher gem: https://rubygems.org/gems/mailcatcher

Utilizo un interceptor ActionMailer para que todos los correos enviados durante el desarrollo o los entornos de prueba se envíen a la misma dirección. Me gusta esto:

 # config/initializers/override_mail_recipient.rb if Rails.env.development? or Rails.env.test? class OverrideMailRecipient def self.delivering_email(mail) mail.to = 'to@example.com' end end ActionMailer::Base.register_interceptor(OverrideMailRecipient) end 

Lo que me gusta hacer es configurar el progtwig de correo de acción en el entorno de desarrollo para usar mailtrap .

Podrías hacer un default de

 class UserMailer < ActionMailer::Base default :to=> "to@example.com" end 

Y luego hacer de la dirección una opción en los métodos. De esa manera, se establecería por defecto el :to usted establecido. Otra idea que tuve fue un poco más:

 class UserMailer < ActionMailer::Base attr_accessor :email_address def initialize if RAILS_ENV == "development" @email_address = "to@example.com" end end end 

Eso requerirá que establezca una nueva dirección en su código, pero se sobrescribirá cada vez que se encuentre en Desarrollo.