如果为真,它将向用户发送错误消息。如果错误的交付错误不会被注意到。
处理此问题的推荐方法是什么?
我们刚刚将一个应用程序投入生产,当我们尝试发送邮件时,我们的 ISP 的邮件服务器经常返回“451 spool busy”错误。
这两个答案都对我们没有好处:如果我们向用户返回错误,我们就是将基础设施问题转嫁给他们;如果我们不这样做,他们就不会得到他们的邀请/确认/通知/其他任何东西,而且没有人知道为什么。
相反,我们决定设置delayed_job,并始终通过它发送邮件;它会自动重试,我们可以(从数据库中的作业队列表中)看到消息是否堆积。(设置起来也很简单——最困难的部分是确保工作线程正在运行,这是对我们的 Monit 配置的简单添加。)
(奖励:这是我写的一个初始化程序,用于延迟生产中的邮件,但仍直接在开发和测试中发送:http: //gist.github.com/178125)
在邮件程序生命周期的某个时刻,您可能会遇到投递错误。
我会推荐
根据您的邮寄者所做的选择上述之一。
您至少应该让用户(和您自己)知道出了问题,否则他们(和您)将不知道是投递失败还是邮件只是卡在垃圾邮件文件夹中。
如果你没有得到很多错误,你可以让 500 错误通过,尽管这对用户来说可能有点不愉快。更好的是捕获并记录异常并让用户重试。
如果您在本地服务器上运行 postfix,如果电子邮件可以成功发送到 postfix(这应该几乎总是发生),那么就不会有问题。