Переопределить почту ActionMailer для адреса в среде разработки

В моей среде разработки я использую копию производственной базы данных при локальном тестировании. По причинам как для тестирования, так и для защиты от отправки тестовых/dev-писем реальным пользователям, какой лучший способ переопределить адрес почты в режиме разработки?

Я знаю, что могу писать логику в каждом почтовом ящике, но у меня их несколько, и было бы неплохо положить все это на место. Могу ли я переопределить метод mail() каким-либо образом, чтобы параметр :to всегда указывал на указанный вами адрес электронной почты?

Ответ 2

Я использую перехватчик ActionMailer, поэтому все письма, отправленные в процессе разработки или тестирования, отправляются на тот же адрес. Вот так:

# 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

Ответ 3

Мне нравится делать настройку action mailer в среде разработки для использования mailtrap.

Ответ 4

Вы могли бы выполнить значение по умолчанию

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

И затем сделайте адрес опцией в методах. Таким образом, он будет установлен по умолчанию для :to. Еще одна идея, которая у меня была, была немного больше:

class UserMailer < ActionMailer::Base
  attr_accessor :email_address

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

Для этого вам потребуется указать новый адрес в коде, но он будет перезаписываться каждый раз в разделе "Разработка".