Log delivery errors in ActionMailer::LogSubscriber
In case of mail delivery errors, the old ActionMailer::LogSubscriber erroneously logged a "Delivered mail ..." line. With this change it checks the passed exception object and logs a "Failed delivery of mail" line instead. Co-authored-by: Christian Esser <c_esser@yahoo.de>
This commit is contained in:
parent
7893e0a165
commit
647e39b278
@ -11,8 +11,9 @@ class LogSubscriber < ActiveSupport::LogSubscriber
|
||||
# An email was delivered.
|
||||
def deliver(event)
|
||||
info do
|
||||
perform_deliveries = event.payload[:perform_deliveries]
|
||||
if perform_deliveries
|
||||
if exception = event.payload[:exception_object]
|
||||
"Failed delivery of mail #{event.payload[:message_id]} error_class=#{exception.class} error_message=#{exception.message.inspect}"
|
||||
elsif event.payload[:perform_deliveries]
|
||||
"Delivered mail #{event.payload[:message_id]} (#{event.duration.round(1)}ms)"
|
||||
else
|
||||
"Skipped delivery of mail #{event.payload[:message_id]} as `perform_deliveries` is false"
|
||||
|
@ -19,6 +19,15 @@ def receive(mail)
|
||||
end
|
||||
end
|
||||
|
||||
class BogusDelivery
|
||||
def initialize(*)
|
||||
end
|
||||
|
||||
def deliver!(mail)
|
||||
raise "failed"
|
||||
end
|
||||
end
|
||||
|
||||
def set_logger(logger)
|
||||
ActionMailer::Base.logger = logger
|
||||
end
|
||||
@ -50,4 +59,17 @@ def test_deliver_message_when_perform_deliveries_is_false
|
||||
ensure
|
||||
BaseMailer.deliveries.clear
|
||||
end
|
||||
|
||||
def test_deliver_message_when_exception_happened
|
||||
previous_delivery_method = BaseMailer.delivery_method
|
||||
BaseMailer.delivery_method = BogusDelivery
|
||||
|
||||
assert_raises(RuntimeError) { BaseMailer.welcome(message_id: "123@abc").deliver_now }
|
||||
wait
|
||||
|
||||
assert_equal(1, @logger.logged(:info).size)
|
||||
assert_equal('Failed delivery of mail 123@abc error_class=RuntimeError error_message="failed"', @logger.logged(:info).first)
|
||||
ensure
|
||||
BaseMailer.delivery_method = previous_delivery_method
|
||||
end
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user