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
This commit is contained in:
Go MAEDA
2019-02-18 13:51:26 +00:00
parent 222546ad6e
commit 514e8b9112
4 changed files with 18 additions and 31 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
---