From 4edc30d157b06be04b51474ab23be9dd3855b56e Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Fri, 13 Apr 2012 16:55:04 +0000 Subject: [PATCH] Ignore emails with Auto-Submitted: auto-replied header (#10607). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9390 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/mail_handler.rb | 19 ++++++++++++++----- test/unit/mail_handler_test.rb | 18 ++++++++++++------ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb index e0c12f1a0..e920dbd5f 100644 --- a/app/models/mail_handler.rb +++ b/app/models/mail_handler.rb @@ -42,6 +42,12 @@ class MailHandler < ActionMailer::Base super email end + cattr_accessor :ignored_emails_headers + @@ignored_emails_headers = { + 'X-Auto-Response-Suppress' => 'OOF', + 'Auto-Submitted' => 'auto-replied' + } + # Processes incoming emails # Returns the created object (eg. an issue, a message) or false def receive(email) @@ -54,12 +60,15 @@ class MailHandler < ActionMailer::Base end return false end - # Ignore out-of-office emails - if email.header_string("X-Auto-Response-Suppress") == 'OOF' - if logger && logger.info - logger.info "MailHandler: ignoring out-of-office email" + # Ignore auto generated emails + self.class.ignored_emails_headers.each do |key, ignored_value| + value = email.header_string(key) + if value && value.to_s.downcase == ignored_value.downcase + if logger && logger.info + logger.info "MailHandler: ignoring email with #{key}:#{value} header" + end + return false end - return false end @user = User.find_by_mail(sender_email) if sender_email.present? if @user && !@user.active? diff --git a/test/unit/mail_handler_test.rb b/test/unit/mail_handler_test.rb index 645a6f15f..73a93088d 100644 --- a/test/unit/mail_handler_test.rb +++ b/test/unit/mail_handler_test.rb @@ -359,12 +359,18 @@ class MailHandlerTest < ActiveSupport::TestCase end end - def test_should_ignore_oof_emails - raw = IO.read(File.join(FIXTURES_PATH, 'ticket_on_given_project.eml')) - raw = "X-Auto-Response-Suppress: OOF\n" + raw - - assert_no_difference 'Issue.count' do - assert_equal false, MailHandler.receive(raw) + def test_should_ignore_auto_replied_emails + [ + "X-Auto-Response-Suppress: OOF", + "Auto-Submitted: auto-replied", + "Auto-Submitted: Auto-Replied" + ].each do |header| + raw = IO.read(File.join(FIXTURES_PATH, 'ticket_on_given_project.eml')) + raw = header + "\n" + raw + + assert_no_difference 'Issue.count' do + assert_equal false, MailHandler.receive(raw), "email with #{header} header was not ignored" + end end end