diff --git a/lib/email/receiver.rb b/lib/email/receiver.rb index cc333ab41fc..eba4409dd09 100644 --- a/lib/email/receiver.rb +++ b/lib/email/receiver.rb @@ -461,17 +461,16 @@ module Email true end - def self.reply_by_email_address_regex - @reply_by_email_address_regex ||= begin - reply_addresses = [ - SiteSetting.reply_by_email_address, - *(SiteSetting.alternative_reply_by_email_addresses.presence || "").split("|") - ] - escaped_reply_addresses = reply_addresses.select(&:present?) - .map { |a| Regexp.escape(a) } - .map { |a| a.gsub(Regexp.escape("%{reply_key}"), "(\\h{32})") } - Regexp.new(escaped_reply_addresses.join("|")) - end + def self.reply_by_email_address_regex(extract_reply_key=true) + reply_addresses = [SiteSetting.reply_by_email_address] + reply_addresses << (SiteSetting.alternative_reply_by_email_addresses.presence || "").split("|") + + reply_addresses.flatten! + reply_addresses.select!(&:present?) + reply_addresses.map! { |a| Regexp.escape(a) } + reply_addresses.map! { |a| a.gsub(Regexp.escape("%{reply_key}"), "(\\h{32})") } + + /#{reply_addresses.join("|")}/ end def group_incoming_emails_regex @@ -529,9 +528,7 @@ module Email end def post_action_for(body) - if likes.include?(body.strip.downcase) - PostActionType.types[:like] - end + PostActionType.types[:like] if likes.include?(body.strip.downcase) end def create_topic(options={}) diff --git a/spec/components/email/receiver_spec.rb b/spec/components/email/receiver_spec.rb index 1b6c2228b08..3242e55a414 100644 --- a/spec/components/email/receiver_spec.rb +++ b/spec/components/email/receiver_spec.rb @@ -526,4 +526,33 @@ describe Email::Receiver do end + context "#reply_by_email_address_regex" do + + before do + SiteSetting.reply_by_email_address = nil + SiteSetting.alternative_reply_by_email_addresses = nil + end + + it "is empty by default" do + expect(Email::Receiver.reply_by_email_address_regex).to eq(//) + end + + it "uses 'reply_by_email_address' site setting" do + SiteSetting.reply_by_email_address = "foo+%{reply_key}@bar.com" + expect(Email::Receiver.reply_by_email_address_regex).to eq(/foo\+(\h{32})@bar\.com/) + end + + it "uses 'alternative_reply_by_email_addresses' site setting" do + SiteSetting.alternative_reply_by_email_addresses = "alt.foo+%{reply_key}@bar.com" + expect(Email::Receiver.reply_by_email_address_regex).to eq(/alt\.foo\+(\h{32})@bar\.com/) + end + + it "combines both 'reply_by_email' settings" do + SiteSetting.reply_by_email_address = "foo+%{reply_key}@bar.com" + SiteSetting.alternative_reply_by_email_addresses = "alt.foo+%{reply_key}@bar.com" + expect(Email::Receiver.reply_by_email_address_regex).to eq(/foo\+(\h{32})@bar\.com|alt\.foo\+(\h{32})@bar\.com/) + end + + end + end