summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2015-10-17 10:03:49 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2015-10-17 10:03:49 +0000
commit3caa88228622eab530cf9520945cd9eb6964faa9 (patch)
treee59c68a60db3245c82707ece9c84ea24f0c6ff83
parent5ad4bee389f5f8def280603e8d96040c717248ac (diff)
downloadredmine-3caa88228622eab530cf9520945cd9eb6964faa9.tar.gz
redmine-3caa88228622eab530cf9520945cd9eb6964faa9.zip
MailHandler: Select project by subaddress (redmine+project@example.com) (#20732).
Patch by Jens Krämer. git-svn-id: http://svn.redmine.org/redmine/trunk@14687 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/models/mail_handler.rb18
-rw-r--r--test/fixtures/mail_handler/ticket_on_project_given_by_to_header.eml60
-rw-r--r--test/unit/mail_handler_test.rb13
3 files changed, 90 insertions, 1 deletions
diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb
index 1364fdb97..770610427 100644
--- a/app/models/mail_handler.rb
+++ b/app/models/mail_handler.rb
@@ -364,11 +364,27 @@ class MailHandler < ActionMailer::Base
keyword
end
+ def get_project_from_receiver_addresses
+ [:to, :cc, :bcc].each do |field|
+ header = @email[field]
+ next if header.blank? || header.field.blank? || !header.field.respond_to?(:addrs)
+ header.field.addrs.each do |addr|
+ if addr.local.to_s =~ /\+([^+]+)\z/
+ if project = Project.find_by_identifier($1)
+ return project
+ end
+ end
+ end
+ end
+ nil
+ end
+
def target_project
# TODO: other ways to specify project:
# * parse the email To field
# * specific project (eg. Setting.mail_handler_target_project)
- target = Project.find_by_identifier(get_keyword(:project))
+ target = get_project_from_receiver_addresses
+ target ||= Project.find_by_identifier(get_keyword(:project))
if target.nil?
# Invalid project keyword, use the project specified as the default one
default_project = handler_options[:issue][:project]
diff --git a/test/fixtures/mail_handler/ticket_on_project_given_by_to_header.eml b/test/fixtures/mail_handler/ticket_on_project_given_by_to_header.eml
new file mode 100644
index 000000000..5bfeeb133
--- /dev/null
+++ b/test/fixtures/mail_handler/ticket_on_project_given_by_to_header.eml
@@ -0,0 +1,60 @@
+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+onlinestore@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. Maecenas imperdiet
+turpis et odio. Integer eget pede vel dolor euismod varius. Phasellus
+blandit eleifend augue. Nulla facilisi. Duis id diam. Class aptent taciti
+sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In
+in urna sed tellus aliquet lobortis. Morbi scelerisque tortor in dolor. Cras
+sagittis odio eu lacus. Aliquam sem tortor, consequat sit amet, vestibulum
+id, iaculis at, lectus. Fusce tortor libero, congue ut, euismod nec, luctus
+eget, eros. Pellentesque tortor enim, feugiat in, dignissim eget, tristique
+sed, mauris --- Pellentesque habitant morbi tristique senectus et netus et
+malesuada fames ac turpis egestas. Quisque sit amet libero. In hac habitasse
+platea dictumst.
+
+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.
+
+BREAK
+
+This paragraph is between delimiters.
+
+---
+
+This paragraph is after the delimiter so it shouldn't appear.
+
+Nulla et nunc. Duis pede. Donec et ipsum. Nam ut dui tincidunt neque
+sollicitudin iaculis. Duis vitae dolor. Vestibulum eget massa. Sed lorem.
+Nullam volutpat cursus erat. Cras felis dolor, lacinia quis, rutrum et,
+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.
+
+
diff --git a/test/unit/mail_handler_test.rb b/test/unit/mail_handler_test.rb
index eb2417d58..5d392c6f4 100644
--- a/test/unit/mail_handler_test.rb
+++ b/test/unit/mail_handler_test.rb
@@ -103,6 +103,19 @@ class MailHandlerTest < ActiveSupport::TestCase
assert_equal 0, issue.done_ratio
end
+ def test_add_issue_to_project_specified_by_subaddress
+ # This email has redmine+onlinestore@somenet.foo as 'To' header
+ issue = submit_email(
+ 'ticket_on_project_given_by_to_header.eml',
+ :issue => {:tracker => 'Support request'}
+ )
+ assert issue.is_a?(Issue)
+ assert !issue.new_record?
+ issue.reload
+ assert_equal 'onlinestore', issue.project.identifier
+ assert_equal 'Support request', issue.tracker.name
+ end
+
def test_add_issue_with_default_tracker
# This email contains: 'Project: onlinestore'
issue = submit_email(