在生产环境中,ActionMailer的raise_delivery_errors应该是true还是false?

4
如果为真,则会向用户发送错误消息。如果为假,则不会注意到投递错误。
如何推荐处理此问题?

4个回答

6
我们刚刚将一个应用程序投入生产,但我们的ISP邮件服务器在尝试发送邮件时经常返回“451 spool busy”错误。对于我们来说,两种答案都不好:如果我们向用户返回错误,我们会将基础设施问题传递给他们;如果我们不这样做,他们就无法收到邀请/确认/通知/任何内容,而且没有人知道原因。
相反,我们决定设置delayed_job,并始终通过它发送邮件;它会自动重试,我们可以从数据库中的作业队列表中看到消息是否积累。(设置非常简单,最困难的部分是确保工作线程正在运行,而这只需要在Monit配置中进行简单的添加即可。)
(奖励:这里是我编写的一个初始化程序,在生产中延迟邮件发送,但在开发和测试中仍直接发送:http://gist.github.com/178125

3

你在邮件的生命周期中很可能会遇到投递错误。

我建议选择以下之一:

  • raise_delivery_errors = true

    捕获错误,并向用户提供反馈信息

  • raise_delivery_errors = false # 不捕获任何错误,忽略发送失败

根据你的邮件发送程序选择其中之一。


0

你至少应该让用户(和自己)知道出了什么问题,否则他们(和你)将不知道是交付失败还是邮件被卡在垃圾邮件文件夹中。

如果你没有遇到太多错误,可以让500错误通过,尽管这可能对用户来说有点不愉快。更好的方法是捕获并记录异常,让用户重试。


0
如果您在本地服务器上运行 postfix,如果电子邮件可以成功发送到 postfix(这几乎总是会发生的),那么就不会有问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接