如何配置Rails以在暂存时禁用发送真实电子邮件?

New*_*ewy 9 ruby-on-rails heroku

我正在使用Heroku,电子邮件不会在开发中发送出去,而是在生产中正确发送.我想在Heroku上运行一个单独的暂存实例,但不希望发送电子邮件(只是发送到日志).

Ale*_*ban 17

test.rb中的这一行告诉ActionMailer不要发送电子邮件:

config.action_mailer.delivery_method = :test
Run Code Online (Sandbox Code Playgroud)

相反,它们在ActionMailer :: Base.deliveries数组中累积.

您需要为应用程序设置暂存环境,并将Heroku配置为在暂存实例上使用该环境.


clu*_*que 12

使用Mail gem的应用程序(包括rails> = 3.0项目)可以使用safety_mailer gem.指定允许发送的电子邮件中的域(或域集或魔术字),并以静默方式删除发送给所有其他域的电子邮件.

https://github.com/cluesque/safety_mailer

将gem添加到您的Gemfile,指定组(可能不是生产)以包含它.

gem "safety_mailer", :group => :development
Run Code Online (Sandbox Code Playgroud)

别忘bundle install了安装

在您的环境文件中config/environments/development.rb配置它,以及一些正则表达式.

config.action_mailer.delivery_method = :safety_mailer
config.action_mailer.safety_mailer_settings = {
  allowed_matchers: [ /mydomain.com/, /mytestacct@gmail.com/, /super_secret_test/ ],
  delivery_method: :smtp,
  delivery_method_settings: {
    :address => "smtp.mydomain.com",
    :port => 25,
    :domain => "mydomain.com",
    :authentication => :plain,
    :user_name => "mydomain_mailer@mydomain.com",
    :password => "password"
  }
}
Run Code Online (Sandbox Code Playgroud)

...现在,发送电子邮件至anyone@mydomain.com,mytestacct @ gmail.com,bob + super_secret_test @ yahoo.com全部收到并发送电子邮件给其他收件人(例如您复制到测试服务器的生产数据库中的真实用户) )被压制了.


gre*_*sen 11

您可能对mailtrap.io感兴趣(免责声明:我与此产品有关联).它是在开发和生产中测试电子邮件交付的完美工具.您所要做的就是在临时环境配置中将mailtrap.io设置为smtp服务器:

  config.action_mailer.smtp_settings = {
   :address => "mailtrap.io",
   :port => 2525,
   :authentication => :plain,
   :user_name => "LOGIN",
   :password => "PASSWORD"
  }
Run Code Online (Sandbox Code Playgroud)

拥有在暂存环境中发送的所有测试电子邮件将存储在mailtrap中以供查看和共享.但不会将它们发送到真实地址.您也可以在开发中使用它.顺便说一下 - 它是完全免费的!


Chi*_*han 6

把它放在你的environment.rb文件中

config.action_mailer.delivery_method = :test
Run Code Online (Sandbox Code Playgroud)

它应该停止向邮件服务器发送邮件,我认为有一个:日志选项,但我还没试过.

  • 您可能希望它位于单独的`environments/staging.rb`文件中,而不是在全局`environment.rb`文件中. (8认同)