4

如果为真,它将向用户发送错误消息。如果错误的交付错误不会被注意到。

处理此问题的推荐方法是什么?

4

4 回答 4

6

我们刚刚将一个应用程序投入生产,当我们尝试发送邮件时,我们的 ISP 的邮件服务器经常返回“451 spool busy”错误。

这两个答案都对我们没有好处:如果我们向用户返回错误,我们就是将基础设施问题转嫁给他们;如果我们不这样做,他们就不会得到他们的邀请/确认/通知/其他任何东西,而且没有人知道为什么。

相反,我们决定设置delayed_job,并始终通过它发送邮件;它会自动重试,我们可以(从数据库中的作业队列表中)看到消息是否堆积。(设置起来也很简单——最困难的部分是确保工作线程正在运行,这是对我们的 Monit 配置的简单添加。)

(奖励:这是我写的一个初始化程序,用于延迟生产中的邮件,但仍直接在开发和测试中发送:http: //gist.github.com/178125

于 2009-09-01T06:58:11.853 回答
3

在邮件程序生命周期的某个时刻,您可能会遇到投递错误。

我会推荐

  • raise_delivery_errors = true

    捕捉错误,并向用户提供某种反馈

  • raise_delivery_errors = false # 不抓任何东西,忽略失败

根据您的邮寄者所做的选择上述之一。

于 2009-08-25T00:06:27.630 回答
0

您至少应该让用户(和您自己)知道出了问题,否则他们(和您)将不知道是投递失败还是邮件只是卡在垃圾邮件文件夹中。

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

于 2009-08-25T02:31:09.660 回答
0

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

于 2011-11-22T02:34:15.793 回答