FIX: Handle forwarded email quotes around Reply-To display name (#14384)
The display name can have quotes around it, which does not work
with our current comparison of a from field (in this case Reply-To)
and another header (X-Original-From), because we are not comparing
the two values in the same way. This causes an issue where the
commit here: b88d8c8
will not
work properly; the forwarded email gets the From address instead
of the Reply-To address as intended.
This commit is contained in:
parent
36bd6e8c3b
commit
4fb7d045a0
|
@ -637,7 +637,10 @@ module Email
|
||||||
|
|
||||||
comparison_failed = false
|
comparison_failed = false
|
||||||
comparison_headers.each do |comparison_header|
|
comparison_headers.each do |comparison_header|
|
||||||
comparison_failed = true if address_field.to_s != mail_object[comparison_header].to_s
|
if mail_object[comparison_header].to_s != "#{from_display_name} <#{from_address}>"
|
||||||
|
comparison_failed = true
|
||||||
|
break
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
next if comparison_failed
|
next if comparison_failed
|
||||||
|
|
|
@ -870,9 +870,9 @@ describe Email::Receiver do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "reply-to header" do
|
describe "reply-to header" do
|
||||||
it "handles emails where there is a reply-to address, using that instead of the from address" do
|
it "handles emails where there is a Reply-To address, using that instead of the from address, if X-Original-From is present" do
|
||||||
SiteSetting.block_auto_generated_emails = false
|
SiteSetting.block_auto_generated_emails = false
|
||||||
expect { process(:reply_to_different_to_from) }.to change(Topic, :count)
|
expect { process(:reply_to_different_to_from) }.to change(Topic, :count).by(1)
|
||||||
user = User.last
|
user = User.last
|
||||||
incoming = IncomingEmail.find_by(message_id: "3848c3m98r439c348mc349@test.mailinglist.com")
|
incoming = IncomingEmail.find_by(message_id: "3848c3m98r439c348mc349@test.mailinglist.com")
|
||||||
topic = incoming.topic
|
topic = incoming.topic
|
||||||
|
@ -880,9 +880,19 @@ describe Email::Receiver do
|
||||||
expect(user.email).to eq("arthurmorgan@reddeadtest.com")
|
expect(user.email).to eq("arthurmorgan@reddeadtest.com")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "allows for quotes around the display name of the Reply-To address" do
|
||||||
|
SiteSetting.block_auto_generated_emails = false
|
||||||
|
expect { process(:reply_to_different_to_from_quoted_display_name) }.to change(Topic, :count).by(1)
|
||||||
|
user = User.last
|
||||||
|
incoming = IncomingEmail.find_by(message_id: "3848c3m98r439c348mc349@test.mailinglist.com")
|
||||||
|
topic = incoming.topic
|
||||||
|
expect(incoming.from_address).to eq("johnmarston@reddeadtest.com")
|
||||||
|
expect(user.email).to eq("johnmarston@reddeadtest.com")
|
||||||
|
end
|
||||||
|
|
||||||
it "does not use the reply-to address if an X-Original-From header is not present" do
|
it "does not use the reply-to address if an X-Original-From header is not present" do
|
||||||
SiteSetting.block_auto_generated_emails = false
|
SiteSetting.block_auto_generated_emails = false
|
||||||
expect { process(:reply_to_different_to_from_no_x_original) }.to change(Topic, :count)
|
expect { process(:reply_to_different_to_from_no_x_original) }.to change(Topic, :count).by(1)
|
||||||
user = User.last
|
user = User.last
|
||||||
incoming = IncomingEmail.find_by(message_id: "3848c3m98r439c348mc349@test.mailinglist.com")
|
incoming = IncomingEmail.find_by(message_id: "3848c3m98r439c348mc349@test.mailinglist.com")
|
||||||
topic = incoming.topic
|
topic = incoming.topic
|
||||||
|
@ -892,7 +902,7 @@ describe Email::Receiver do
|
||||||
|
|
||||||
it "does not use the reply-to address if the X-Original-From header is different from the reply-to address" do
|
it "does not use the reply-to address if the X-Original-From header is different from the reply-to address" do
|
||||||
SiteSetting.block_auto_generated_emails = false
|
SiteSetting.block_auto_generated_emails = false
|
||||||
expect { process(:reply_to_different_to_from_x_original_different) }.to change(Topic, :count)
|
expect { process(:reply_to_different_to_from_x_original_different) }.to change(Topic, :count).by(1)
|
||||||
user = User.last
|
user = User.last
|
||||||
incoming = IncomingEmail.find_by(message_id: "3848c3m98r439c348mc349@test.mailinglist.com")
|
incoming = IncomingEmail.find_by(message_id: "3848c3m98r439c348mc349@test.mailinglist.com")
|
||||||
topic = incoming.topic
|
topic = incoming.topic
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
From: 'Marston, John' via Western Support <westernsupport@test.mailinglist.com>
|
||||||
|
Reply-To: =?iso-8859-1?Q?Marston=2C_John?= <johnmarston@reddeadtest.com>
|
||||||
|
To: team@bar.com
|
||||||
|
Subject: I need some support
|
||||||
|
Date: Fri, 15 Jan 2016 00:12:43 +0100
|
||||||
|
Message-ID: <3848c3m98r439c348mc349@test.mailinglist.com>
|
||||||
|
Mime-Version: 1.0
|
||||||
|
Content-Type: text/plain
|
||||||
|
Content-Transfer-Encoding: 7bit
|
||||||
|
X-Original-From: Marston, John <johnmarston@reddeadtest.com>
|
||||||
|
Precedence: list
|
||||||
|
Mailing-list: list westernsupport@test.mailinglist.com; contact
|
||||||
|
westernsupport+owners@test.mailinglist.com
|
||||||
|
List-ID: <westernsupport@test.mailinglist.com>
|
||||||
|
|
||||||
|
Ain't no trouble.
|
Loading…
Reference in New Issue