diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb index 9298e1b12..be4b363b1 100755 --- a/app/models/mail_handler.rb +++ b/app/models/mail_handler.rb @@ -91,7 +91,8 @@ class MailHandler < ActionMailer::Base @handler_options = options sender_email = email.from.to_a.first.to_s.strip # Ignore emails received from the application emission address to avoid hell cycles - if sender_email.casecmp(Setting.mail_from.to_s.strip) == 0 + emission_address = Setting.mail_from.to_s.gsub(/(?:.*<|>.*|\(.*\))/, '').strip + if sender_email.casecmp(emission_address) == 0 if logger logger.info "MailHandler: ignoring email from Redmine emission address [#{sender_email}]" end diff --git a/test/unit/mail_handler_test.rb b/test/unit/mail_handler_test.rb index 0feb23d90..9d7fd6d12 100644 --- a/test/unit/mail_handler_test.rb +++ b/test/unit/mail_handler_test.rb @@ -765,14 +765,23 @@ class MailHandlerTest < ActiveSupport::TestCase end def test_should_ignore_emails_from_emission_address + emission_addresses = [ + 'redmine@example.net', + 'Redmine ', + 'redmine@example.net (Redmine)' + ] Role.anonymous.add_permission!(:add_issues) - assert_no_difference 'User.count' do - assert_equal false, - submit_email( - 'ticket_from_emission_address.eml', - :issue => {:project => 'ecookbook'}, - :unknown_user => 'create' - ) + emission_addresses.each do |addr| + with_settings :mail_from => addr do + assert_no_difference 'User.count' do + assert_equal false, + submit_email( + 'ticket_from_emission_address.eml', + :issue => {:project => 'ecookbook'}, + :unknown_user => 'create' + ) + end + end end end