diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb index 3c9857873..c100f8d97 100644 --- a/app/models/mail_handler.rb +++ b/app/models/mail_handler.rb @@ -405,6 +405,11 @@ class MailHandler < ActionMailer::Base else [email] end + + parts.reject! do |part| + part.header[:content_disposition].try(:disposition_type) == 'attachment' + end + @plain_text_body = parts.map {|p| Redmine::CodesetUtil.to_utf8(p.body.decoded, p.charset)}.join("\r\n") # strip html tags and remove doctype directive diff --git a/test/fixtures/mail_handler/multiple_text_parts.eml b/test/fixtures/mail_handler/multiple_text_parts.eml index c61bcb786..794caa354 100644 --- a/test/fixtures/mail_handler/multiple_text_parts.eml +++ b/test/fixtures/mail_handler/multiple_text_parts.eml @@ -52,4 +52,11 @@ Content-Type: text/plain; The third one. +--Apple-Mail=_33C8180A-B097-4B87-A925-441300BDB9C9 +Content-Transfer-Encoding: quoted-printable +Content-Type: text/plain; charset=us-ascii +Content-Disposition: attachment; filename="textfile.txt" + +Plain text attachment + --Apple-Mail=_33C8180A-B097-4B87-A925-441300BDB9C9-- diff --git a/test/unit/mail_handler_test.rb b/test/unit/mail_handler_test.rb index 7e0f80cf3..785d16ffd 100644 --- a/test/unit/mail_handler_test.rb +++ b/test/unit/mail_handler_test.rb @@ -501,13 +501,21 @@ class MailHandlerTest < ActiveSupport::TestCase assert_equal 'd8e8fca2dc0f896fd7cb4cb0031ba249', attachment.digest end - def test_multiple_text_parts + def test_multiple_inline_text_parts_should_be_appended_to_issue_description issue = submit_email('multiple_text_parts.eml', :issue => {:project => 'ecookbook'}) assert_include 'first', issue.description assert_include 'second', issue.description assert_include 'third', issue.description end + def test_attachment_text_part_should_be_added_as_issue_attachment + issue = submit_email('multiple_text_parts.eml', :issue => {:project => 'ecookbook'}) + assert_not_include 'Plain text attachment', issue.description + attachment = issue.attachments.detect {|a| a.filename == 'textfile.txt'} + assert_not_nil attachment + assert_include 'Plain text attachment', File.read(attachment.diskfile) + end + def test_add_issue_with_iso_8859_1_subject issue = submit_email( 'subject_as_iso-8859-1.eml',