Мы только что запустили приложение в производство, и почтовый сервер нашего провайдера часто выдает ошибки «451 спул занят», когда мы пытаемся отправить почту.
Ни один из ответов нам не подошел: если мы возвращаем ошибку пользователю, мы передаем им проблему с нашей инфраструктурой; если мы этого не сделаем, они не получат своего приглашения / подтверждения / уведомления / чего бы то ни было, и никто не знает почему.
Вместо этого мы решили настроить delayed_job и всегда отправлять почту через него; он повторяется автоматически, и мы можем видеть (из таблицы очереди заданий в базе данных), накапливаются ли сообщения. (Его тоже было очень просто настроить - самой сложной задачей было убедиться, что рабочий поток запущен, и это было простым дополнением к нашей конфигурации Monit.)
(Бонус: вот инициализатор, который я написал, чтобы отложить отправку почты в производство, но все же отправить ее непосредственно в процессе разработки и тестирования: http://gist.github.com/178125)