Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2022-02-24 18:15:02 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-02-24 18:15:02 +0300
commitc4b4a75c35cb2015c01ef0b60f8ad8baaaf889df (patch)
tree16eabfd63477e1904d7eb5d9f92f3e5a4e4d3e0f /lib/gitlab/email
parente40c68997d44209aed2baf3a8ec6be9ae99fb0b5 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/email')
-rw-r--r--lib/gitlab/email/receiver.rb26
1 files changed, 25 insertions, 1 deletions
diff --git a/lib/gitlab/email/receiver.rb b/lib/gitlab/email/receiver.rb
index 5b2bbfbe66b..58e7b2f1b44 100644
--- a/lib/gitlab/email/receiver.rb
+++ b/lib/gitlab/email/receiver.rb
@@ -8,6 +8,8 @@ module Gitlab
class Receiver
include Gitlab::Utils::StrongMemoize
+ RECEIVED_HEADER_REGEX = /for\s+\<(.+)\>/.freeze
+
def initialize(raw)
@raw = raw
end
@@ -37,6 +39,8 @@ module Gitlab
delivered_to: delivered_to.map(&:value),
envelope_to: envelope_to.map(&:value),
x_envelope_to: x_envelope_to.map(&:value),
+ # reduced down to what looks like an email in the received headers
+ received_recipients: recipients_from_received_headers,
meta: {
client_id: "email/#{mail.from.first}",
project: handler&.project&.full_path
@@ -82,7 +86,8 @@ module Gitlab
find_key_from_references ||
find_key_from_delivered_to_header ||
find_key_from_envelope_to_header ||
- find_key_from_x_envelope_to_header
+ find_key_from_x_envelope_to_header ||
+ find_first_key_from_received_headers
end
def ensure_references_array(references)
@@ -117,6 +122,10 @@ module Gitlab
Array(mail[:x_envelope_to])
end
+ def received
+ Array(mail[:received])
+ end
+
def find_key_from_delivered_to_header
delivered_to.find do |header|
key = email_class.key_from_address(header.value)
@@ -138,6 +147,21 @@ module Gitlab
end
end
+ def find_first_key_from_received_headers
+ return unless ::Feature.enabled?(:use_received_header_for_incoming_emails, default_enabled: :yaml)
+
+ recipients_from_received_headers.find do |email|
+ key = email_class.key_from_address(email)
+ break key if key
+ end
+ end
+
+ def recipients_from_received_headers
+ strong_memoize :emails_from_received_headers do
+ received.map { |header| header.value[RECEIVED_HEADER_REGEX, 1] }.compact
+ end
+ end
+
def ignore_auto_reply!
if auto_submitted? || auto_replied?
raise AutoGeneratedEmailError