Commit 001c8cd0 authored by Stan Hu's avatar Stan Hu

Gracefully handle SMTP user input errors (e.g. incorrect email addresses) to...

Gracefully handle SMTP user input errors (e.g. incorrect email addresses) to prevent Sidekiq retries

Closes https://github.com/gitlabhq/gitlabhq/issues/9560
parent 55fc58bd
...@@ -6,6 +6,7 @@ v 8.0.0 (unreleased) ...@@ -6,6 +6,7 @@ v 8.0.0 (unreleased)
- Faster merge - Faster merge
- Ability to fetch merge requests from refs/merge-requests/:id - Ability to fetch merge requests from refs/merge-requests/:id
- Allow displaying of archived projects in the admin interface (Artem Sidorenko) - Allow displaying of archived projects in the admin interface (Artem Sidorenko)
- Gracefully handle SMTP user input errors (e.g. incorrect email addresses) to prevent Sidekiq retries (Stan Hu)
v 7.14.0 (unreleased) v 7.14.0 (unreleased)
- Update default robots.txt rules to disallow crawling of irrelevant pages (Ben Bodenmiller) - Update default robots.txt rules to disallow crawling of irrelevant pages (Ben Bodenmiller)
......
...@@ -4,7 +4,7 @@ class EmailsOnPushWorker ...@@ -4,7 +4,7 @@ class EmailsOnPushWorker
def perform(project_id, recipients, push_data, options = {}) def perform(project_id, recipients, push_data, options = {})
options.symbolize_keys! options.symbolize_keys!
options.reverse_merge!( options.reverse_merge!(
send_from_committer_email: false, send_from_committer_email: false,
disable_diffs: false disable_diffs: false
) )
send_from_committer_email = options[:send_from_committer_email] send_from_committer_email = options[:send_from_committer_email]
...@@ -16,9 +16,9 @@ class EmailsOnPushWorker ...@@ -16,9 +16,9 @@ class EmailsOnPushWorker
ref = push_data["ref"] ref = push_data["ref"]
author_id = push_data["user_id"] author_id = push_data["user_id"]
action = action =
if Gitlab::Git.blank_ref?(before_sha) if Gitlab::Git.blank_ref?(before_sha)
:create :create
elsif Gitlab::Git.blank_ref?(after_sha) elsif Gitlab::Git.blank_ref?(after_sha)
:delete :delete
else else
...@@ -42,17 +42,22 @@ class EmailsOnPushWorker ...@@ -42,17 +42,22 @@ class EmailsOnPushWorker
end end
recipients.split(" ").each do |recipient| recipients.split(" ").each do |recipient|
Notify.repository_push_email( begin
project_id, Notify.repository_push_email(
recipient, project_id,
author_id: author_id, recipient,
ref: ref, author_id: author_id,
action: action, ref: ref,
compare: compare, action: action,
reverse_compare: reverse_compare, compare: compare,
send_from_committer_email: send_from_committer_email, reverse_compare: reverse_compare,
disable_diffs: disable_diffs send_from_committer_email: send_from_committer_email,
).deliver disable_diffs: disable_diffs
).deliver
# These are input errors and won't be corrected even if Sidekiq retries
rescue Net::SMTPFatalError, Net::SMTPSyntaxError => e
logger.info("Failed to send e-mail for project '#{project.name_with_namespace}' to #{recipient}: #{e}")
end
end end
ensure ensure
compare = nil compare = nil
......
require 'spec_helper'
describe EmailsOnPushWorker do
include RepoHelpers
let(:project) { create(:project) }
let(:user) { create(:user) }
let(:data) { Gitlab::PushDataBuilder.build_sample(project, user) }
subject { EmailsOnPushWorker.new }
before do
allow(Project).to receive(:find).and_return(project)
end
describe "#perform" do
it "sends mail" do
subject.perform(project.id, user.email, data.stringify_keys)
email = ActionMailer::Base.deliveries.last
expect(email.subject).to include('Change some files')
expect(email.to).to eq([user.email])
end
it "gracefully handles an input SMTP error" do
ActionMailer::Base.deliveries.clear
allow(Notify).to receive(:repository_push_email).and_raise(Net::SMTPFatalError)
subject.perform(project.id, user.email, data.stringify_keys)
expect(ActionMailer::Base.deliveries.count).to eq(0)
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment