summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGo MAEDA <maeda@farend.jp>2019-02-18 13:51:26 +0000
committerGo MAEDA <maeda@farend.jp>2019-02-18 13:51:26 +0000
commit514e8b9112dca74ad82bc24eb55ef258ae47fa97 (patch)
tree908c4d1bebf5c47ebf3c5cc1c0d1f96cc9e55d4a
parent222546ad6ef625ffc6387154638f30fa67a2f8d4 (diff)
downloadredmine-514e8b9112dca74ad82bc24eb55ef258ae47fa97.tar.gz
redmine-514e8b9112dca74ad82bc24eb55ef258ae47fa97.zip
Merged r17878 and r17879 from trunk to 4.0-stable (#30785).
git-svn-id: http://svn.redmine.org/redmine/branches/4.0-stable@17880 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rwxr-xr-xapp/models/mail_handler.rb3
-rw-r--r--app/models/setting.rb6
-rw-r--r--test/unit/mail_handler_test.rb23
-rw-r--r--test/unit/setting_test.rb17
4 files changed, 18 insertions, 31 deletions
diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb
index 6586c52bb..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_address) == 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/app/models/setting.rb b/app/models/setting.rb
index e6de85906..e59c48c86 100644
--- a/app/models/setting.rb
+++ b/app/models/setting.rb
@@ -228,12 +228,6 @@ 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
diff --git a/test/unit/mail_handler_test.rb b/test/unit/mail_handler_test.rb
index 5c3a570b7..246434e3c 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@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
diff --git a/test/unit/setting_test.rb b/test/unit/setting_test.rb
index 2e184f36b..b65717dbe 100644
--- a/test/unit/setting_test.rb
+++ b/test/unit/setting_test.rb
@@ -108,23 +108,6 @@ 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
---