class MailHandler < ActionMailer::Base
# Processes incoming emails
- # Currently, it only supports adding notes to an existing issue
+ # Currently, it only supports adding a note to an existing issue
# by replying to the initial notification message
def receive(email)
# find related issue by parsing the subject
# check permission
return unless Permission.allowed_to_role("issues/add_note", user.role_for_project(issue.project))
- # add the notes
- issue.init_journal(user, email.body)
+ # add the note
+ issue.init_journal(user, email.body.chomp)
issue.save
end
end
--- /dev/null
+x-sender: <jsmith@somenet.foo>\r
+x-receiver: <redmine@somenet.foo>\r
+Received: from somenet.foo ([127.0.0.1]) by somenet.foo;\r
+ Sun, 25 Feb 2007 09:57:56 GMT\r
+Date: Sun, 25 Feb 2007 10:57:56 +0100\r
+From: jsmith@somenet.foo\r
+To: redmine@somenet.foo\r
+Message-Id: <45e15df440c00_b90238570a27b@osiris.tmail>\r
+In-Reply-To: <45e15df440c29_b90238570a27b@osiris.tmail>\r
+Subject: [Cookbook - Feature #2]\r
+Mime-Version: 1.0\r
+Content-Type: text/plain; charset=utf-8\r
+\r
+Note added by mail\r
--- /dev/null
+# redMine - project management software
+# Copyright (C) 2006-2007 Jean-Philippe Lang
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+require File.dirname(__FILE__) + '/../test_helper'
+
+class MailHandlerTest < Test::Unit::TestCase
+ fixtures :users, :projects, :roles, :members, :permissions, :issues, :permissions_roles, :trackers, :enumerations
+
+ FIXTURES_PATH = File.dirname(__FILE__) + '/../fixtures'
+ CHARSET = "utf-8"
+
+ include ActionMailer::Quoting
+
+ def setup
+ ActionMailer::Base.delivery_method = :test
+ ActionMailer::Base.perform_deliveries = true
+ ActionMailer::Base.deliveries = []
+
+ @expected = TMail::Mail.new
+ @expected.set_content_type "text", "plain", { "charset" => CHARSET }
+ @expected.mime_version = '1.0'
+ end
+
+ def test_add_note_to_issue
+ raw = read_fixture("add_note_to_issue_2.txt").join
+ MailHandler.receive(raw)
+
+ issue = Issue.find(2)
+ journal = issue.journals.find(:first, :order => "created_on DESC")
+ assert journal
+ assert_equal User.find_by_mail("jsmith@somenet.foo"), journal.user
+ assert_equal "Note added by mail", journal.notes
+ end
+
+ private
+ def read_fixture(action)
+ IO.readlines("#{FIXTURES_PATH}/mail_handler/#{action}")
+ end
+
+ def encode(subject)
+ quoted_printable(subject, CHARSET)
+ end
+end