如何让ActionMailer始终给我发电子邮件?

时间:2011-12-31 22:21:34

标签: ruby-on-rails email

我将ActiveMailer与第三方邮件提供商一起使用。为了开发我的应用程序,我希望在我的电子邮件客户端中实际看到以用户身份进来的电子邮件。

因此,在开发模式中,我希望我的应用程序发送邮件,而不是禁用电子邮件,但更改“到”字段,以便将每封电子邮件发送给我。这可能吗?

更新:我想测试我的电子邮件所需的完整路线:浏览我的ESP,到达我的收件箱,在Gmail中查看。我不打算只测试是否创建了电子邮件。

4 个答案:

答案 0 :(得分:2)

我个人推荐Ryan Bates的letter_opener,但是,如果你真的想要传递邮件而不是仅仅在浏览器中查看邮件,那么有很多其他插件可用已经列出了。但是,没有人提到你可以非常使用Interceptors轻松完成此任务。

在Rails应用程序的config/initializers目录中创建一个新的初始值设定项:

# config/initializers/development_mail_interceptor.rb
class DevelopmentMailInterceptor
  def self.delivering_email(message)
    message.subject = "[#{message.to}] #{message.subject}"
    message.to = "YOUR_EMAIL@gmail.com"
  end
end
ActionMailer::Base.register_interceptor(DevelopmentMailInterceptor) if Rails.env.development?

这可以充分利用您应用上拦截器的强大功能。它不会配置任何内容,而是更改邮件的信封,更改tosubject字段。将YOUR_EMAIL替换为正确的值。

self.delivering_email(message)方法调用ActionMailer方法。您正在使用该方法并覆盖消息信封。

最后,如果我们当前在开发环境中,则注册该拦截器。

请务必重新启动服务器,并且所有邮件(在开发中)都会实际发送到您的电子邮箱。

答案 1 :(得分:1)

您可以考虑查看类似MockSMTP(OS X)的内容;而不是修改“到”字段,而是将开发模式的邮件服务器设置为应用程序创建的“假”SMTP服务器,然后从所有电子邮件(发送给任何人)转到应用程序。

我自己从未使用过它,但我记得看过the devs at 37signals use it

在其他操作系统上,您可以考虑以下项目之一:

    Ryan Bates的
  • letter_opener - 在发送电子邮件时弹出一个新的浏览器窗口
  • MailCatcher(mu提到的太短了) - 运行虚假的SMTP服务器和基于网络的界面来查看发送给它的邮件
  • mailtrap - 与MockSMTP类似,既有模拟SMTP服务器又有单独的查看器程序

答案 2 :(得分:1)

省去一些麻烦并运行MailCatcher。 MailCatcher是一个简单的SMTP服务器,它只是抓取出站电子邮件并通过简单的Web界面将其提供给您。安装MailCatcher,将其添加到您的environments/development.rb

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = { :host => 'localhost', :port => 1025 }

启动Rails服务器时启动MailCatcher(或使用Foreman或类似的东西来处理它),然后转到http://localhost:1080/查看应用程序发送的电子邮件。

答案 3 :(得分:0)

尽管我喜欢this answer,但我选择了不同的选择。

使用mail_safe gem!除了提供sethvargo答案的功能外,除了添加gem之外,它不需要任何其他工作,它会自动确定从.gitconfig发送电子邮件的人。

我在研究时很少看到一个重要的注意事项是,您必须使用deliver,而不是deliver!。后者不会调用拦截器(尽管显然它仍然会调用观察者,如果这有用的话)。