Должен ли ActionMailer поднять флагов_доставки в работе? - PullRequest
4 голосов
/ 25 августа 2009

Если true, он отправит сообщение об ошибке пользователю. Если ложные ошибки доставки не будут замечены.

Какой рекомендуемый способ справиться с этим?

Ответы [ 4 ]

6 голосов
/ 01 сентября 2009

Мы только что запустили приложение в производство, и почтовый сервер нашего провайдера часто выдает ошибки «451 спул занят», когда мы пытаемся отправить почту.

Ни один из ответов нам не подошел: если мы возвращаем ошибку пользователю, мы передаем им проблему с нашей инфраструктурой; если мы этого не сделаем, они не получат своего приглашения / подтверждения / уведомления / чего бы то ни было, и никто не знает почему.

Вместо этого мы решили настроить delayed_job и всегда отправлять почту через него; он повторяется автоматически, и мы можем видеть (из таблицы очереди заданий в базе данных), накапливаются ли сообщения. (Его тоже было очень просто настроить - самой сложной задачей было убедиться, что рабочий поток запущен, и это было простым дополнением к нашей конфигурации Monit.)

(Бонус: вот инициализатор, который я написал, чтобы отложить отправку почты в производство, но все же отправить ее непосредственно в процессе разработки и тестирования: http://gist.github.com/178125)

3 голосов
/ 25 августа 2009

Скорее всего, вы столкнетесь с ошибками доставки в какой-то момент жизненного цикла почтовой программы.

Я бы порекомендовал либо

  • Raise_Delivery_errors = true

    Перехватите ошибку и предоставьте пользователю какую-то обратную связь

  • rise_delivery_errors = false # Не перехватывать ничего, просто игнорировать ошибку

В зависимости от того, что делает ваш почтовик, выберите один из вышеперечисленных.

0 голосов
/ 22 ноября 2011

Если вы запустите postfix на локальном сервере, и если электронная почта может быть успешно отправлена ​​на postfix (что должно происходить почти всегда), тогда проблем не будет.

0 голосов
/ 25 августа 2009

Вы должны, по крайней мере, сообщить пользователю (и себе), что что-то пошло не так, иначе они (и вы) не будут знать, произошел ли сбой доставки или почта просто застряла в папке спама.

Если вы не получаете много ошибок, вы можете просто пропустить ошибку 500, хотя это может быть немного неприятно для пользователя. Лучше перехватить и зарегистрировать исключение и позволить пользователю повторить попытку.

...