]> source.dussan.org Git - redmine.git/commitdiff
Added a simple mail handler.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 9 May 2007 18:46:43 +0000 (18:46 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Wed, 9 May 2007 18:46:43 +0000 (18:46 +0000)
It lets users add notes to an existing issue by replying to the initial notification email.
Permissions are checked in the same way as in the application (the user is identified by its mail address).

Information about configuring the application so that it receives emails can be found here:
http://wiki.rubyonrails.com/rails/pages/HowToReceiveEmailsWithActionMailer

RedMine mail hander is MailHandler#receive

git-svn-id: http://redmine.rubyforge.org/svn/trunk@523 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/mail_handler.rb [new file with mode: 0644]

diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb
new file mode 100644 (file)
index 0000000..8721749
--- /dev/null
@@ -0,0 +1,40 @@
+# 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.
+
+class MailHandler < ActionMailer::Base
+  
+  # Processes incoming emails
+  # Currently, it only supports adding notes to an existing issue
+  # by replying to the initial notification message
+  def receive(email)
+    # find related issue by parsing the subject
+    m = email.subject.match %r{\[.*#(\d+)\]}
+    return unless m
+    issue = Issue.find_by_id(m[1])
+    return unless issue
+    
+    # find user
+    user = User.find_active(:first, :conditions => {:mail => email.from.first})
+    return unless user
+    # 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)
+    issue.save
+  end
+end