demarches-normaliennes/app/mailers/concerns/mailer_monitoring_concern.rb

31 lines
1 KiB
Ruby
Raw Normal View History

module MailerMonitoringConcern
2023-01-10 00:40:16 +01:00
extend ActiveSupport::Concern
included do
# Intercept & log any error, then re-raise so job will retry.
# NOTE: rescue_from order matters, later matchers are tried first.
rescue_from StandardError, with: :log_and_raise_delivery_error
2023-01-10 00:40:16 +01:00
# Dont retry to send a message if the server rejects the recipient address
rescue_from Net::SMTPSyntaxError do |_exception|
message.perform_deliveries = false
end
rescue_from Net::SMTPServerBusy do |exception|
if /unexpected recipients/.match?(exception.message)
message.perform_deliveries = false
else
log_and_raise_delivery_error(exception)
2023-01-10 00:40:16 +01:00
end
end
def log_and_raise_delivery_error(exception)
EmailEvent.create_from_message!(message, status: "dispatch_error")
Sentry.capture_exception(exception, extra: { to: message.to, subject: message.subject })
2023-01-10 00:40:16 +01:00
# re-raise another error so job will retry later
raise MailDeliveryError.new(exception)
2023-01-10 00:40:16 +01:00
end
end
end