Handle incoming emails from aliases correctly
These set the 'actual' destination email in one of the Delivered-To lines, so check those too.
This commit is contained in:
parent
513a81ff9c
commit
eb490365b5
4 changed files with 58 additions and 5 deletions
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Handle incoming emails from aliases correctly
|
||||
merge_request:
|
||||
author:
|
|
@ -57,9 +57,8 @@ module Gitlab
|
|||
end
|
||||
|
||||
def key_from_additional_headers(mail)
|
||||
references = ensure_references_array(mail.references)
|
||||
|
||||
find_key_from_references(references)
|
||||
find_key_from_references(mail) ||
|
||||
find_key_from_delivered_to_header(mail)
|
||||
end
|
||||
|
||||
def ensure_references_array(references)
|
||||
|
@ -75,12 +74,19 @@ module Gitlab
|
|||
end
|
||||
end
|
||||
|
||||
def find_key_from_references(references)
|
||||
references.find do |mail_id|
|
||||
def find_key_from_references(mail)
|
||||
ensure_references_array(mail.references).find do |mail_id|
|
||||
key = Gitlab::IncomingEmail.key_from_fallback_message_id(mail_id)
|
||||
break key if key
|
||||
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
|
||||
|
|
25
spec/fixtures/emails/forwarded_new_issue.eml
vendored
Normal file
25
spec/fixtures/emails/forwarded_new_issue.eml
vendored
Normal file
|
@ -0,0 +1,25 @@
|
|||
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'
|
|||
describe Gitlab::Email::Receiver, lib: true do
|
||||
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
|
||||
let(:email_raw) { fixture_file('emails/valid_reply.eml').gsub(mail_key, "!!!") }
|
||||
|
||||
|
|
Loading…
Reference in a new issue