Commit 6ece0c98 authored by Sean McGivern's avatar Sean McGivern

Handle incoming emails from aliases correctly

These set the 'actual' destination email in one of the Delivered-To lines, so
check those too.
parent 0be4083a
---
title: Handle incoming emails from aliases correctly
merge_request:
author:
...@@ -57,9 +57,8 @@ module Gitlab ...@@ -57,9 +57,8 @@ module Gitlab
end end
def key_from_additional_headers(mail) def key_from_additional_headers(mail)
references = ensure_references_array(mail.references) find_key_from_references(mail) ||
find_key_from_delivered_to_header(mail)
find_key_from_references(references)
end end
def ensure_references_array(references) def ensure_references_array(references)
...@@ -75,12 +74,19 @@ module Gitlab ...@@ -75,12 +74,19 @@ module Gitlab
end end
end end
def find_key_from_references(references) def find_key_from_references(mail)
references.find do |mail_id| ensure_references_array(mail.references).find do |mail_id|
key = Gitlab::IncomingEmail.key_from_fallback_message_id(mail_id) key = Gitlab::IncomingEmail.key_from_fallback_message_id(mail_id)
break key if key break key if key
end end
end end
def find_key_from_delivered_to_header(mail)
Array(mail[:delivered_to]).find do |header|
key = Gitlab::IncomingEmail.key_from_address(header.value)
break key if key
end
end
end end
end end
end end
Delivered-To: incoming+gitlabhq/gitlabhq+auth_token@appmail.adventuretime.ooo
Return-Path: <jake@adventuretime.ooo>
Received: from iceking.adventuretime.ooo ([unix socket]) by iceking (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA; Thu, 13 Jun 2013 17:03:50 -0400
Received: from mail-ie0-x234.google.com (mail-ie0-x234.google.com [IPv6:2607:f8b0:4001:c03::234]) by iceking.adventuretime.ooo (8.14.3/8.14.3/Debian-9.4) with ESMTP id r5DL3nFJ016967 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=NOT) for <incoming+gitlabhq/gitlabhq@appmail.adventuretime.ooo>; Thu, 13 Jun 2013 17:03:50 -0400
Received: by mail-ie0-f180.google.com with SMTP id f4so21977375iea.25 for <incoming+gitlabhq/gitlabhq@appmail.adventuretime.ooo>; Thu, 13 Jun 2013 14:03:48 -0700
Received: by 10.0.0.1 with HTTP; Thu, 13 Jun 2013 14:03:48 -0700
Date: Thu, 13 Jun 2013 17:03:48 -0400
From: Jake the Dog <jake@adventuretime.ooo>
Delivered-To: support@adventuretime.ooo
To: support@adventuretime.ooo
Message-ID: <CADkmRc+rNGAGGbV2iE5p918UVy4UyJqVcXRO2=otppgzduJSg@mail.gmail.com>
Subject: New Issue by email
Mime-Version: 1.0
Content-Type: text/plain;
charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
X-Sieve: CMU Sieve 2.2
X-Received: by 10.0.0.1 with SMTP id n7mr11234144ipb.85.1371157428600; Thu,
13 Jun 2013 14:03:48 -0700 (PDT)
X-Scanned-By: MIMEDefang 2.69 on IPv6:2001:470:1d:165::1
The reply by email functionality should be extended to allow creating a new issue by email.
* Allow an admin to specify which project the issue should be created under by checking the sender domain.
* Possibly allow the use of regular expression matches within the subject/body to specify which project the issue should be created under.
...@@ -4,6 +4,24 @@ require_relative 'email_shared_blocks' ...@@ -4,6 +4,24 @@ require_relative 'email_shared_blocks'
describe Gitlab::Email::Receiver, lib: true do describe Gitlab::Email::Receiver, lib: true do
include_context :email_shared_context include_context :email_shared_context
context "when the email contains a valid email address in a Delivered-To header" do
let(:email_raw) { fixture_file('emails/forwarded_new_issue.eml') }
let(:handler) { double(:handler) }
before do
stub_incoming_email_setting(enabled: true, address: "incoming+%{key}@appmail.adventuretime.ooo")
allow(handler).to receive(:execute)
allow(handler).to receive(:metrics_params)
end
it "finds the mail key" do
expect(Gitlab::Email::Handler).to receive(:for).with(an_instance_of(Mail::Message), 'gitlabhq/gitlabhq+auth_token').and_return(handler)
receiver.execute
end
end
context "when we cannot find a capable handler" do context "when we cannot find a capable handler" do
let(:email_raw) { fixture_file('emails/valid_reply.eml').gsub(mail_key, "!!!") } let(:email_raw) { fixture_file('emails/valid_reply.eml').gsub(mail_key, "!!!") }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment