]> source.dussan.org Git - redmine.git/commitdiff
Fix: Mail handler does not ignore emails sent from emission email address if Setting...
authorGo MAEDA <maeda@farend.jp>
Tue, 12 Feb 2019 23:35:05 +0000 (23:35 +0000)
committerGo MAEDA <maeda@farend.jp>
Tue, 12 Feb 2019 23:35:05 +0000 (23:35 +0000)
Patch by Go MAEDA.

git-svn-id: http://svn.redmine.org/redmine/trunk@17862 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/mail_handler.rb
app/models/setting.rb
test/unit/setting_test.rb

index 9298e1b12b4fdbb28fba16ef94f45db0606fa547..6586c52bb8160fd83514ff1e1ad520b10ebd5696 100755 (executable)
@@ -91,7 +91,7 @@ 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
+    if sender_email.casecmp(Setting.mail_from_address) == 0
       if logger
         logger.info  "MailHandler: ignoring email from Redmine emission address [#{sender_email}]"
       end
index e59c48c86c802e811eb1d5bd9104e341032dd0e2..e6de85906f810a438d20fc04e78eec60903d37c4 100644 (file)
@@ -228,6 +228,12 @@ class Setting < ActiveRecord::Base
     Object.const_defined?(:OpenID) && self[:openid].to_i > 0
   end
 
+  # Extracts an email address ("joe@example.com") from
+  # Setting.mail_from ("Joe Bloggs <joe@example.com>")
+  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 5eed249f172d7949048ea3b480ec5c727b206806..710d9581e29160fb8d85415e0ae87a89c05fb4e2 100644 (file)
@@ -112,6 +112,23 @@ class SettingTest < ActiveSupport::TestCase
     end
   end
 
+  def test_mail_from_address
+    mail_from_strings = [
+      'joe@example.com',
+      '<joe@example.com>',
+      'Joe Bloggs <joe@example.com>',
+      'display_name@example.com <joe@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
 ---