Переопределить почту ActionMailer для адресации в среде разработки - PullRequest
12 голосов
/ 15 марта 2012

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

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

Ответы [ 4 ]

29 голосов
/ 03 июня 2012

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

# 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
8 голосов
/ 15 марта 2012

Я думаю, что лучше всего использовать такой сервис, как mailtrap.io: http://mailtrap.io или mailcatcher gem: https://rubygems.org/gems/mailcatcher

3 голосов
/ 15 марта 2012

Мне нравится настраивать почтовую программу действий в среде разработки на использование mailtrap .

1 голос
/ 15 марта 2012

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

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

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

class UserMailer < ActionMailer::Base
  attr_accessor :email_address

  def initialize
    if RAILS_ENV == "development"
      @email_address = "to@example.com"
    end
  end
end

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...