如何在开发中禁用 ActionMailer?

Posted

技术标签:

【中文标题】如何在开发中禁用 ActionMailer?【英文标题】:How to disable ActionMailer in Development? 【发布时间】:2011-12-05 11:54:11 【问题描述】:

有时在我开发过程中,我没有互联网连接。这会在我的应用应该发送电子邮件的任何地方导致错误:

getaddrinfo: nodename nor servname provided, or not known

是否有一种简单快捷的方法可以更改配置值以使 ActionMailer 不尝试实际发送电子邮件而不抛出错误?也许那是开发环境的范围。或者我可以通过其他方式避免抛出错误并且我的代码在我调用 actionmailer 的任何地方传递?

我正在使用 Rails 3.1

【问题讨论】:

【参考方案1】:

如果您想在 Rails 应用程序初始化后(在创建示例数据、迁移期间等)禁用邮件传递:

ActionMailer::Base.perform_deliveries = false

【讨论】:

【参考方案2】:

通常的做法是让 Rails 忽略邮件错误。在您的config/environments/development.rb 文件中添加、取消注释或修改:

# Don't care if the mailer can't send
config.action_mailer.raise_delivery_errors = false

你也可以这样设置:

config.action_mailer.perform_deliveries = false

在此处查看文档http://edgeguides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration

你也可以将传递方式设置为:test,但我还没有真正尝试过

config.action_mailer.delivery_method = :test

【讨论】:

对于对.delivery_method = :test 感兴趣的人:ActionMailer 不会发送任何电子邮件,而是将它们存储在ActionMailer::Base.deliveries 可用的数组中。这可能是大多数人的首选选项,因为它使您能够例如在代码中放置一个断点并确保 ActionMailer 收到了您的发送请求(并且看起来应该如此),或者当然在测试中使用它。 (来源:api.rubyonrails.org/classes/ActionMailer/Base.html)

以上是关于如何在开发中禁用 ActionMailer?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ActionMailer 中将云文件添加为电子邮件附件

ActionMailer在测试模式下发送真实的电子邮件! - 如何关闭?

Rails - 你如何测试 ActionMailer 在测试中发送了特定的电子邮件

使用 rspec 进行 ActionMailer 测试 [关闭]

Rails 4 ActionMailer - 如何在使用 Deliver_later 时捕获连接和 SMTP 错误

ruby 如何在ActionMailer中为各个用户设置* url_options *