]> source.dussan.org Git - redmine.git/commitdiff
Ignore email keywords after truncation line (#8758).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 20 Sep 2014 07:51:37 +0000 (07:51 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 20 Sep 2014 07:51:37 +0000 (07:51 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@13413 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/mail_handler.rb
test/fixtures/mail_handler/ticket_on_given_project.eml
test/fixtures/mail_handler/ticket_with_duplicate_keyword.eml [new file with mode: 0644]
test/fixtures/mail_handler/ticket_with_keyword_after_delimiter.eml [new file with mode: 0644]
test/unit/mail_handler_test.rb

index 69e70d21d2a1a160a9a33e2ba413c3e9572d3cd2..dab7a1a8227673199e3a8dbaf3685b4d1e3f4455 100644 (file)
@@ -319,7 +319,7 @@ class MailHandler < ActionMailer::Base
     else
       @keywords[attr] = begin
         if (options[:override] || @@handler_options[:allow_override].include?(attr.to_s)) &&
-              (v = extract_keyword!(plain_text_body, attr, options[:format]))
+              (v = extract_keyword!(cleaned_up_text_body, attr, options[:format]))
           v
         elsif !@@handler_options[:issue][attr].blank?
           @@handler_options[:issue][attr]
@@ -347,7 +347,7 @@ class MailHandler < ActionMailer::Base
     regexp = /^(#{keys.join('|')})[ \t]*:[ \t]*(#{format})\s*$/i
     if m = text.match(regexp)
       keyword = m[2].strip
-      text.gsub!(regexp, '')
+      text.sub!(regexp, '')
     end
     keyword
   end
@@ -436,7 +436,7 @@ class MailHandler < ActionMailer::Base
   end
 
   def cleaned_up_text_body
-    cleanup_body(plain_text_body)
+    @cleaned_up_text_body ||= cleanup_body(plain_text_body)
   end
 
   def cleaned_up_subject
index 5e6d9113eaddcf07b174b8f165433f1cd0795b00..7c0fe320852ca574e5ceb951f222acfd0facf297 100644 (file)
@@ -30,6 +30,15 @@ sed, mauris --- Pellentesque habitant morbi tristique senectus et netus et
 malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse 
 platea dictumst.
 
+Project: onlinestore
+Status: Resolved
+due date: 2010-12-31
+Start Date:2010-01-01
+Assigned to: John Smith
+fixed version: alpha
+estimated hours: 2.5
+done ratio: 30
+
 --- This line starts with a delimiter and should not be stripped
 
 This paragraph is before delimiters.
@@ -49,12 +58,3 @@ dictum et, ligula. Sed erat nibh, gravida in, accumsan non, placerat sed,
 massa. Sed sodales, ante fermentum ultricies sollicitudin, massa leo 
 pulvinar dui, a gravida orci mi eget odio. Nunc a lacus.
 
-Project: onlinestore
-Status: Resolved
-due date: 2010-12-31
-Start Date:2010-01-01
-Assigned to: John Smith
-fixed version: alpha
-estimated hours: 2.5
-done ratio: 30
-
diff --git a/test/fixtures/mail_handler/ticket_with_duplicate_keyword.eml b/test/fixtures/mail_handler/ticket_with_duplicate_keyword.eml
new file mode 100644 (file)
index 0000000..e70c277
--- /dev/null
@@ -0,0 +1,25 @@
+Return-Path: <JSmith@somenet.foo>
+Received: from osiris ([127.0.0.1])
+       by OSIRIS
+       with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200
+Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris>
+From: "John Smith" <JSmith@somenet.foo>
+To: <redmine@somenet.foo>
+Subject: New ticket on a given project
+Date: Sun, 22 Jun 2008 12:28:07 +0200
+MIME-Version: 1.0
+Content-Type: text/plain;
+       format=flowed;
+       charset="iso-8859-1";
+       reply-type=original
+Content-Transfer-Encoding: 7bit
+X-Priority: 3
+X-MSMail-Priority: Normal
+X-Mailer: Microsoft Outlook Express 6.00.2900.2869
+X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
+
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+
+Project: ecookbook
+Priority: High
+Priority: Low
diff --git a/test/fixtures/mail_handler/ticket_with_keyword_after_delimiter.eml b/test/fixtures/mail_handler/ticket_with_keyword_after_delimiter.eml
new file mode 100644 (file)
index 0000000..736ea5d
--- /dev/null
@@ -0,0 +1,27 @@
+Return-Path: <JSmith@somenet.foo>
+Received: from osiris ([127.0.0.1])
+       by OSIRIS
+       with hMailServer ; Sun, 22 Jun 2008 12:28:07 +0200
+Message-ID: <000501c8d452$a95cd7e0$0a00a8c0@osiris>
+From: "John Smith" <JSmith@somenet.foo>
+To: <redmine@somenet.foo>
+Subject: New ticket on a given project
+Date: Sun, 22 Jun 2008 12:28:07 +0200
+MIME-Version: 1.0
+Content-Type: text/plain;
+       format=flowed;
+       charset="iso-8859-1";
+       reply-type=original
+Content-Transfer-Encoding: 7bit
+X-Priority: 3
+X-MSMail-Priority: Normal
+X-Mailer: Microsoft Outlook Express 6.00.2900.2869
+X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
+
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+
+Project: ecookbook
+
+== DELIMITER ==
+
+Priority: High
index 6c3aefc41b874c1123b842c1c43ae93e7cfe4d76..1a34690311964d42b593357d70df853605038676 100644 (file)
@@ -856,6 +856,20 @@ class MailHandlerTest < ActiveSupport::TestCase
     assert_equal issue.subject, 'New ticket on a given project with a very long subject line which exceeds 255 chars and should not be ignored but chopped off. And if the subject line is still not long enough, we just add more text. And more text. Wow, this is really annoying. Especially, if you have nothing to say...'[0,255]
   end
 
+  def test_first_keyword_should_be_matched
+    issue = submit_email('ticket_with_duplicate_keyword.eml', :allow_override => 'priority')
+    assert issue.is_a?(Issue)
+    assert_equal 'High', issue.priority.name
+  end
+
+  def test_keyword_after_delimiter_should_be_ignored
+    with_settings :mail_handler_body_delimiters => "== DELIMITER ==" do
+      issue = submit_email('ticket_with_keyword_after_delimiter.eml', :allow_override => 'priority')
+      assert issue.is_a?(Issue)
+      assert_equal 'Normal', issue.priority.name
+    end
+  end
+
   def test_new_user_from_attributes_should_return_valid_user
     to_test = {
       # [address, name] => [login, firstname, lastname]