Commit b01707e1 authored by Jan Provaznik's avatar Jan Provaznik Committed by Dmitriy Zaporozhets

Ignore incoming emails with X-Autoreply

Some messages may not contains the RFC-compliant Auto-Submitted
header, instead they may use X-Autoreply header for automated replies
(e.g. out of office emails).
parent 5718728f
---
title: Ignore incoming emails with X-Autoreply header.
merge_request: 18118
author:
type: fixed
...@@ -32,7 +32,7 @@ module Gitlab ...@@ -32,7 +32,7 @@ module Gitlab
mail = build_mail mail = build_mail
ignore_auto_submitted!(mail) ignore_auto_reply!(mail)
mail_key = extract_mail_key(mail) mail_key = extract_mail_key(mail)
handler = Handler.for(mail, mail_key) handler = Handler.for(mail, mail_key)
...@@ -96,14 +96,25 @@ module Gitlab ...@@ -96,14 +96,25 @@ module Gitlab
end end
end end
def ignore_auto_submitted!(mail) def ignore_auto_reply!(mail)
if auto_submitted?(mail) || auto_replied?(mail)
raise AutoGeneratedEmailError
end
end
def auto_submitted?(mail)
# Mail::Header#[] is case-insensitive # Mail::Header#[] is case-insensitive
auto_submitted = mail.header['Auto-Submitted']&.value auto_submitted = mail.header['Auto-Submitted']&.value
# Mail::Field#value would strip leading and trailing whitespace # Mail::Field#value would strip leading and trailing whitespace
raise AutoGeneratedEmailError if # See also https://tools.ietf.org/html/rfc3834
# See also https://tools.ietf.org/html/rfc3834 auto_submitted && auto_submitted != 'no'
auto_submitted && auto_submitted != 'no' end
def auto_replied?(mail)
autoreply = mail.header['X-Autoreply']&.value
autoreply && autoreply == 'yes'
end end
end end
end end
......
...@@ -12,7 +12,7 @@ Mime-Version: 1.0 ...@@ -12,7 +12,7 @@ Mime-Version: 1.0
Content-Type: text/plain; Content-Type: text/plain;
charset=ISO-8859-1 charset=ISO-8859-1
Content-Transfer-Encoding: 7bit Content-Transfer-Encoding: 7bit
Auto-Submitted: auto-generated X-Autoreply: yes
X-Sieve: CMU Sieve 2.2 X-Sieve: CMU Sieve 2.2
X-Received: by 10.0.0.1 with SMTP id n7mr11234144ipb.85.1371157428600; Thu, X-Received: by 10.0.0.1 with SMTP id n7mr11234144ipb.85.1371157428600; Thu,
13 Jun 2013 14:03:48 -0700 (PDT) 13 Jun 2013 14:03:48 -0700 (PDT)
......
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 <reply+59d8df8370b7e95c5a49fbf86aeb2c93@discourse.example.com>; Thu, 13 Jun 2013 17:03:50 -0400
Received: by mail-ie0-f180.google.com with SMTP id f4so21977375iea.25 for <reply+59d8df8370b7e95c5a49fbf86aeb2c93@discourse.example.com>; 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>
To: reply+636ca428858779856c226bb145ef4fad@appmail.adventuretime.ooo
Message-ID: <CADkmRc+rNGAGGbV2iE5p918UVy4UyJqVcXRO2=otppgzduJSg@mail.gmail.com>
Subject: re: [Discourse Meta] eviltrout posted in 'Adventure Time Sux'
Mime-Version: 1.0
Content-Type: text/plain;
charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
Auto-Submitted: auto-generated
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
Test reply to Discourse email digest
...@@ -40,7 +40,15 @@ describe Gitlab::Email::Receiver do ...@@ -40,7 +40,15 @@ describe Gitlab::Email::Receiver do
end end
end end
context "when the email was auto generated" do context "when the email was auto generated with Auto-Submitted header" do
let(:email_raw) { fixture_file("emails/auto_submitted.eml") }
it "raises an AutoGeneratedEmailError" do
expect { receiver.execute }.to raise_error(Gitlab::Email::AutoGeneratedEmailError)
end
end
context "when the email was auto generated with X-Autoreply header" do
let(:email_raw) { fixture_file("emails/auto_reply.eml") } let(:email_raw) { fixture_file("emails/auto_reply.eml") }
it "raises an AutoGeneratedEmailError" do it "raises an AutoGeneratedEmailError" do
......
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