Я использую обратный вызов after_action
в своих почтовых программах для записи этого письма. Письма отправляются через Delayed Job. Это работает, за исключением случаев, когда мы не можем связаться с удаленным сервером - в этом случае письмо не отправляется, но мы записываем, что это было. Задержка задания повторно отправляет электронное письмо позже, и оно успешно доставлено, но затем мы записали, что были отправлены два письма.Обнаружение сбоев доставки почтовых сообщений в обратных вызовах after_action
Это выглядит примерно так:
class UserMailer < ActionMailer::Base
after_action :record_email
def record_email
Rails.logger.info("XYZZY: Recording Email")
@user.emails.create!
end
def spam!(user)
@user = user
Rails.logger.info("XYZZY: Sending spam!")
m = mail(to: user.email, subject: 'SPAM!')
Rails.logger.info("XYZZY: mail method finished")
m
end
end
Я называю этот код, как это (с помощью delayed job performable mailer):
UserMailer.delay.spam!(User.find(1))
Когда я пошагово это отладчик, кажется, что мой метод after_action называется до того, как почта доставлена.
[Job:104580969] XYZZY: Sending spam!
[Job:104580969] XYZZY: mail method finished
[Job:104580969] XYZZY: Recording Email
Job UserMailer.app_registration_welcome (id=104580969) FAILED (3 prior attempts) with Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 1025
Как я могу поймать сетевые ошибки в моем методы почтовой программы и запись о том, что попытка электронной почты не удалась или вообще ничего не делала? Я использую Rails 4.2.4.
Это не работает. Он немного отличается от того, как отложенная работа обрабатывает электронную почту. Он вызывает ваш метод почтовой программы, а затем вызывает доставку (или доставляет его). Таким образом, фактическая доставка осуществляется за пределами спама! метод –
Я также хочу, чтобы что-то работало, не задумываясь о его реализации на каждом методе почтовой рассылки или в chagne все мои существующие методы почтовой программы (их около 30) –