@@ -42,6 +42,12 class MailHandler < ActionMailer::Base | |||||
42 | super email |
|
42 | super email | |
43 | end |
|
43 | end | |
44 |
|
44 | |||
|
45 | cattr_accessor :ignored_emails_headers | |||
|
46 | @@ignored_emails_headers = { | |||
|
47 | 'X-Auto-Response-Suppress' => 'OOF', | |||
|
48 | 'Auto-Submitted' => 'auto-replied' | |||
|
49 | } | |||
|
50 | ||||
45 | # Processes incoming emails |
|
51 | # Processes incoming emails | |
46 | # Returns the created object (eg. an issue, a message) or false |
|
52 | # Returns the created object (eg. an issue, a message) or false | |
47 | def receive(email) |
|
53 | def receive(email) | |
@@ -54,12 +60,15 class MailHandler < ActionMailer::Base | |||||
54 | end |
|
60 | end | |
55 | return false |
|
61 | return false | |
56 | end |
|
62 | end | |
57 |
# Ignore |
|
63 | # Ignore auto generated emails | |
58 | if email.header_string("X-Auto-Response-Suppress") == 'OOF' |
|
64 | self.class.ignored_emails_headers.each do |key, ignored_value| | |
59 | if logger && logger.info |
|
65 | value = email.header_string(key) | |
60 | logger.info "MailHandler: ignoring out-of-office email" |
|
66 | if value && value.to_s.downcase == ignored_value.downcase | |
|
67 | if logger && logger.info | |||
|
68 | logger.info "MailHandler: ignoring email with #{key}:#{value} header" | |||
|
69 | end | |||
|
70 | return false | |||
61 | end |
|
71 | end | |
62 | return false |
|
|||
63 | end |
|
72 | end | |
64 | @user = User.find_by_mail(sender_email) if sender_email.present? |
|
73 | @user = User.find_by_mail(sender_email) if sender_email.present? | |
65 | if @user && !@user.active? |
|
74 | if @user && !@user.active? |
@@ -359,12 +359,18 class MailHandlerTest < ActiveSupport::TestCase | |||||
359 | end |
|
359 | end | |
360 | end |
|
360 | end | |
361 |
|
361 | |||
362 |
def test_should_ignore_ |
|
362 | def test_should_ignore_auto_replied_emails | |
363 | raw = IO.read(File.join(FIXTURES_PATH, 'ticket_on_given_project.eml')) |
|
363 | [ | |
364 |
|
|
364 | "X-Auto-Response-Suppress: OOF", | |
365 |
|
365 | "Auto-Submitted: auto-replied", | ||
366 | assert_no_difference 'Issue.count' do |
|
366 | "Auto-Submitted: Auto-Replied" | |
367 | assert_equal false, MailHandler.receive(raw) |
|
367 | ].each do |header| | |
|
368 | raw = IO.read(File.join(FIXTURES_PATH, 'ticket_on_given_project.eml')) | |||
|
369 | raw = header + "\n" + raw | |||
|
370 | ||||
|
371 | assert_no_difference 'Issue.count' do | |||
|
372 | assert_equal false, MailHandler.receive(raw), "email with #{header} header was not ignored" | |||
|
373 | end | |||
368 | end |
|
374 | end | |
369 | end |
|
375 | end | |
370 |
|
376 |
General Comments 0
You need to be logged in to leave comments.
Login now