Нам пришлось столкнуться с той же проблемой в Beanstalk. Прежде всего мы отключили «lift_delivery_errors» в производственной среде, затем мы реализовали метод переопределения для ActionMailer :: Base, который позволял нам изменять этот параметр на лету для конкретных поставок. Как это:
AccountMailer.raise_errors do
AccountMailer.deliver_welcome_email(@account)
end
Это позволило нам контролировать, когда именно мы хотим, чтобы появлялись исключения при доставке, и избегать проблем, когда такие ошибки ломали то, чего не должны были делать. Обычно есть только одно или два места, где вы хотите поместить это переопределение. В нашем случае это функции «Забыть пароль» и «Пригласить пользователя», когда важно сообщить пользователям, что их электронное письмо / приглашение для сброса пароля не доставлено. Наличие исключений доставки в фоновом режиме никому не помогает.
После этого мы добавили rescue_from в наш ApplicationController, который установил бы flash [: alert] и перенаправил назад.
def postmark_delivery_error(exception)
if address = derive_email_from_postmark_exception(exception)
link = %Q[<a href="#{ reactivate_email_bounce_path(address) }">reactivating</a>]
msg = "We could not deliver a recent message to “#{ address }”. The email was disabled due to a hard bounce or a spam complaint. You can try #{ link } it and try again."
else
msg = "We could not deliver a recent message. The email was disabled due to a hard bounce or a spam complaint. Please contact support."
end
flash[:alert] = msg
redirect_to :back
end
activtivate_email_bounce_path ссылается на контроллер, который использует Postmark API для повторной активации отказов. Вы можете найти более подробную информацию об этом здесь:
http://developer.postmarkapp.com/developer-bounces.html
Таким образом, после того, как вы все это сделаете, у вашего конечного пользователя будет довольно хороший опыт работы с ошибками доставки, что обычно не решается в веб-приложениях. В Beanstalk это выглядит так:
![Beanstalk reactive bounce](https://i.stack.imgur.com/yJZNA.jpg)
И не только пользователь может видеть, что его электронное письмо отскочило, но и сам реагировать на него:
![Beanstalk reactivate bounce](https://i.stack.imgur.com/gApnM.jpg)
Надеюсь, это поможет.
Илья Сабанин
http://twitter.com/isabanin