summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2013-07-13 08:11:20 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2013-07-13 08:11:20 +0000
commit8ff33ac9f7819ea157f3045a75ea04963504f35d (patch)
tree93d4a412496b186039ef57b394ffbcec92ca2768
parent6ecd90e7ff5cba5c6976062ed01d213a5b46cdfd (diff)
downloadredmine-8ff33ac9f7819ea157f3045a75ea04963504f35d.tar.gz
redmine-8ff33ac9f7819ea157f3045a75ea04963504f35d.zip
Log email delivery errors (#14403).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@12010 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/models/mailer.rb12
-rw-r--r--test/unit/mailer_test.rb23
2 files changed, 34 insertions, 1 deletions
diff --git a/app/models/mailer.rb b/app/models/mailer.rb
index 5c773c5f1..83dbd9fc6 100644
--- a/app/models/mailer.rb
+++ b/app/models/mailer.rb
@@ -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)
diff --git a/test/unit/mailer_test.rb b/test/unit/mailer_test.rb
index f66e5763c..c4891678f 100644
--- a/test/unit/mailer_test.rb
+++ b/test/unit/mailer_test.rb
@@ -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