将所有外发电子邮件重定向到单个地址以进行测试

在Ruby on Rails中,我处于这样一种情况:我希望我的应用程序(在特定的测试环境中)拦截应用程序生成的所有外发电子邮件,而是将它们发送到不同的测试地址(也可能修改正文)说“最初发送到:……”)。

我看到ActionMailer有一些钩子来观察或拦截邮件,但如果有更简单的方法,我不想自己动手解决。 建议?

我们正在使用sanitize_email gem取得了很大的成功。 它会将所有电子邮件发送到您指定的地址,并将主题与原始收件人一起预先添加。 听起来它完全符合您的要求,并使QA-ing电子邮件对我们来说变得轻而易举。

老问题,但首先打击谷歌……

我最终通过(ab)使用delivery_method = :sendmail以不同的方式解决了这个问题,这有效地将电子邮件发送到可执行文件; 这被认为是sendmail ,但它可以是任何东西,真的。

config/environments/development.rb您可以执行以下操作:

 YourApp::Application.configure do # [...] config.action_mailer.delivery_method = :sendmail config.action_mailer.sendmail_settings = { location: "#{Rails.root}/script/fake-sendmail", arguments: 'martin+rails@arp242.net', } end 

然后制作script/fake-sendmail

 #!/bin/sh sendmail -if fake_sendmail@example.com "$1" < /dev/stdin 

(别忘了制作这个可执行文件!)

一个相关的解决方案(我更喜欢)是将它附加到一个mbox文件; 这需要很少的设置。

config/environments/development.rb看起来很相似:

 YourApp::Application.configure do # [...] config.action_mailer.delivery_method = :sendmail config.action_mailer.sendmail_settings = { location: "#{Rails.root}/script/fake-sendmail", arguments: "'#{Rails.root}/tmp/mail.mbox'", } end 

script/fake-sendmail现在看起来像:

 #!/bin/sh echo "From FAKE-SENDMAIL $(date)" >> "$1" cat /dev/stdin >> "$1" echo >> "$1" 

使用$any电子邮件客户端打开mbox文件...

这是一种非常简单的方法,似乎运行得很好。 可以在这里找到更多细节(我是本页的作者)。