在开发环境中覆盖ActionMailer的邮件地址

时间:2012-03-14 21:39:41

标签: ruby-on-rails

在我的开发环境中,我在本地测试时使用生产数据库的副本。出于测试和仅仅是为了防止向真实用户发送测试/开发电子邮件的原因,在开发模式下覆盖邮件地址的最佳方法是什么?

我知道我可以在每个邮件程序中编写逻辑,但我有几个,将它们全部放在一个位置会很好。我可以以某种方式覆盖mail()方法,使:to参数始终指向我指定的电子邮件地址吗?

4 个答案:

答案 0 :(得分:29)

我使用ActionMailer interceptor,因此在开发或测试环境中发送的所有邮件都会发送到同一地址。像这样:

# 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

答案 1 :(得分:8)

我认为最好的选择是使用像mailtrap.io这样的服务:http://mailtrap.io或mailcatcher gem:https://rubygems.org/gems/mailcatcher

答案 2 :(得分:3)

我喜欢在开发环境中配置动作邮件程序以使用mailtrap

答案 3 :(得分:1)

could do默认为

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

这需要您在代码中设置一个新地址,但每次在开发中都会被覆盖。