don't log an ErrorReport for 450 Recipient address rejected

This isn't an actionable error. Though at some point it'd be nice to
display a message to the user if their emails are consistently failing.

Change-Id: Ia760214c355976592373404b03a41d9ff64034e7
Reviewed-on: https://gerrit.instructure.com/16566
Tested-by: Jenkins <jenkins@instructure.com>
Reviewed-by: Cody Cutrer <cody@instructure.com>
QA-Review: Clare Hetherington <clare@instructure.com>
This commit is contained in:
Brian Palmer 2013-01-05 09:22:55 -07:00
parent d1a6006a1c
commit d118c9ede1
2 changed files with 25 additions and 2 deletions

View File

@ -442,7 +442,9 @@ class Message < ActiveRecord::Base
if res
complete_dispatch
elsif @exception
if !@exception.is_a?(Timeout::Error)
raise_error = @exception.to_s !~ /^450/
log_error = raise_error && !@exception.is_a?(Timeout::Error)
if log_error
ErrorReport.log_exception(:default, @exception, {
:message => "Message delivery failed",
:to => self.to,
@ -450,7 +452,11 @@ class Message < ActiveRecord::Base
})
end
self.errored_dispatch
raise @exception
if raise_error
raise @exception
else
return false
end
end
true
end

View File

@ -86,6 +86,23 @@ describe Message do
@message.deliver.should be_nil
@message.reload.state.should == :cancelled
end
it "should log errors and raise based on error type" do
message_model(:dispatch_at => Time.now, :workflow_state => 'staged', :to => 'somebody', :updated_at => Time.now.utc - 11.minutes, :user => user, :path_type => 'email')
Mailer.expects(:deliver_message).raises("something went wrong")
ErrorReport.expects(:log_exception)
expect { @message.deliver }.to raise_exception("something went wrong")
message_model(:dispatch_at => Time.now, :workflow_state => 'staged', :to => 'somebody', :updated_at => Time.now.utc - 11.minutes, :user => user, :path_type => 'email')
Mailer.expects(:deliver_message).raises(Timeout::Error.new)
ErrorReport.expects(:log_exception).never
expect { @message.deliver }.to raise_exception(Timeout::Error)
message_model(:dispatch_at => Time.now, :workflow_state => 'staged', :to => 'somebody', :updated_at => Time.now.utc - 11.minutes, :user => user, :path_type => 'email')
Mailer.expects(:deliver_message).raises("450 recipient address rejected")
ErrorReport.expects(:log_exception).never
@message.deliver.should == false
end
end
end
end