将所有外发电子邮件重定向到单个地址以进行测试
在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文件...
这是一种非常简单的方法,似乎运行得很好。 可以在这里找到更多细节(我是本页的作者)。