Browse Source

Log email delivery errors (#14403).

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@12010 e93f8b46-1217-0410-a6f0-8f06a7374b81
tags/2.4.0
Jean-Philippe Lang 11 years ago
parent
commit
8ff33ac9f7
2 changed files with 34 additions and 1 deletions
  1. 11
    1
      app/models/mailer.rb
  2. 23
    0
      test/unit/mailer_test.rb

+ 11
- 1
app/models/mailer.rb View File

@@ -430,7 +430,17 @@ class Mailer < ActionMailer::Base

def self.deliver_mail(mail)
return false if mail.to.blank? && mail.cc.blank? && mail.bcc.blank?
super
begin
# Log errors when raise_delivery_errors is set to false, Rails does not
mail.raise_delivery_errors = true
super
rescue Exception => e
if ActionMailer::Base.raise_delivery_errors
raise e
else
Rails.logger.error "Email delivery error: #{e.message}"
end
end
end

def self.method_missing(method, *args, &block)

+ 23
- 0
test/unit/mailer_test.rb View File

@@ -661,6 +661,29 @@ class MailerTest < ActiveSupport::TestCase
assert_include '&lt;tag&gt;', html_part.body.encoded
end

def test_should_raise_delivery_errors_when_raise_delivery_errors_is_true
mail = Mailer.test_email(User.find(1))
mail.delivery_method.stubs(:deliver!).raises(Exception.new("delivery error"))

ActionMailer::Base.raise_delivery_errors = true
assert_raise Exception, "delivery error" do
mail.deliver
end
ensure
ActionMailer::Base.raise_delivery_errors = false
end

def test_should_log_delivery_errors_when_raise_delivery_errors_is_false
mail = Mailer.test_email(User.find(1))
mail.delivery_method.stubs(:deliver!).raises(Exception.new("delivery error"))

Rails.logger.expects(:error).with("Email delivery error: delivery error")
ActionMailer::Base.raise_delivery_errors = false
assert_nothing_raised do
mail.deliver
end
end

private

def last_email

Loading…
Cancel
Save