Index: app/models/mail_handler.rb =================================================================== --- app/models/mail_handler.rb (revision 17857) +++ app/models/mail_handler.rb (working copy) @@ -91,7 +91,7 @@ @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 + if sender_email.casecmp(Setting.mail_from_address) == 0 if logger logger.info "MailHandler: ignoring email from Redmine emission address [#{sender_email}]" end Index: app/models/setting.rb =================================================================== --- app/models/setting.rb (revision 17857) +++ app/models/setting.rb (working copy) @@ -228,6 +228,12 @@ Object.const_defined?(:OpenID) && self[:openid].to_i > 0 end + # Extracts an email address ("joe@example.com") from + # Setting.mail_from ("Joe Bloggs ") + def self.mail_from_address + self.mail_from.to_s.gsub(/(?:.*<|>.*|\(.*\))/, '').strip + end + # Checks if settings have changed since the values were read # and clears the cache hash if it's the case # Called once per request Index: test/unit/setting_test.rb =================================================================== --- test/unit/setting_test.rb (revision 17857) +++ test/unit/setting_test.rb (working copy) @@ -112,6 +112,23 @@ end end + def test_mail_from_address + mail_from_strings = [ + 'joe@example.com', + '', + 'Joe Bloggs ', + 'display_name@example.com ', + 'joe@example.com (Joe Bloggs)', + 'joe@example.com (display_name@example.com)' + ] + + mail_from_strings.each do |from_value| + with_settings :mail_from => from_value do + assert_equal 'joe@example.com', Setting.mail_from_address + end + end + end + def test_setting_serialied_as_binary_should_be_loaded_as_utf8_encoded_strings yaml = <<-YAML ---