Fix handling multiple text parts in email (#13646).
Patch by Alex Shulgin. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@11834 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
76a3298306
commit
9b7d312a0e
|
@ -377,12 +377,21 @@ class MailHandler < ActionMailer::Base
|
|||
def plain_text_body
|
||||
return @plain_text_body unless @plain_text_body.nil?
|
||||
|
||||
part = email.text_part || email.html_part || email
|
||||
@plain_text_body = Redmine::CodesetUtil.to_utf8(part.body.decoded, part.charset)
|
||||
parts = if (text_parts = email.all_parts.select {|p| p.mime_type == 'text/plain'}).present?
|
||||
text_parts
|
||||
elsif (html_parts = email.all_parts.select {|p| p.mime_type == 'text/html'}).present?
|
||||
html_parts
|
||||
else
|
||||
[email]
|
||||
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
|
||||
@plain_text_body = strip_tags(@plain_text_body.strip)
|
||||
@plain_text_body.sub! %r{^<!DOCTYPE .*$}, ''
|
||||
if parts.any? {|p| p.mime_type == 'text/html'}
|
||||
@plain_text_body = strip_tags(@plain_text_body.strip)
|
||||
@plain_text_body.sub! %r{^<!DOCTYPE .*$}, ''
|
||||
end
|
||||
|
||||
@plain_text_body
|
||||
end
|
||||
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
From JSmith@somenet.foo Fri Mar 22 08:30:28 2013
|
||||
From: John Smith <JSmith@somenet.foo>
|
||||
Content-Type: multipart/mixed; boundary="Apple-Mail=_33C8180A-B097-4B87-A925-441300BDB9C9"
|
||||
Message-Id: <BB533668-3CC8-41CA-A951-0A5D8EA37FB0@somenet.foo>
|
||||
Mime-Version: 1.0 (Mac OS X Mail 6.3 \(1503\))
|
||||
Subject: Test with multiple text parts
|
||||
Date: Fri, 22 Mar 2013 17:30:20 +0200
|
||||
To: redmine@somenet.foo
|
||||
X-Mailer: Apple Mail (2.1503)
|
||||
|
||||
|
||||
|
||||
--Apple-Mail=_33C8180A-B097-4B87-A925-441300BDB9C9
|
||||
Content-Transfer-Encoding: quoted-printable
|
||||
Content-Type: text/plain;
|
||||
charset=us-ascii
|
||||
|
||||
The first text part.
|
||||
|
||||
--Apple-Mail=_33C8180A-B097-4B87-A925-441300BDB9C9
|
||||
Content-Disposition: inline;
|
||||
filename=1st.pdf
|
||||
Content-Type: application/pdf;
|
||||
x-unix-mode=0644;
|
||||
name="1st.pdf"
|
||||
Content-Transfer-Encoding: base64
|
||||
|
||||
JVBERi0xLjMKJcTl8uXrp/Og0MTGCjQgMCBvYmoKPDwgL0xlbmd0aCA1IDAgUiAvRmlsdGVyIC9G
|
||||
|
||||
--Apple-Mail=_33C8180A-B097-4B87-A925-441300BDB9C9
|
||||
Content-Transfer-Encoding: quoted-printable
|
||||
Content-Type: text/plain;
|
||||
charset=us-ascii
|
||||
|
||||
The second text part.
|
||||
|
||||
--Apple-Mail=_33C8180A-B097-4B87-A925-441300BDB9C9
|
||||
Content-Disposition: inline;
|
||||
filename=2nd.pdf
|
||||
Content-Type: application/pdf;
|
||||
x-unix-mode=0644;
|
||||
name="2nd.pdf"
|
||||
Content-Transfer-Encoding: base64
|
||||
|
||||
JVBERi0xLjMKJcTl8uXrp/Og0MTGCjQgMCBvYmoKPDwgL0xlbmd0aCA1IDAgUiAvRmlsdGVyIC9G
|
||||
|
||||
|
||||
--Apple-Mail=_33C8180A-B097-4B87-A925-441300BDB9C9
|
||||
Content-Transfer-Encoding: quoted-printable
|
||||
Content-Type: text/plain;
|
||||
charset=us-ascii
|
||||
|
||||
The third one.
|
||||
|
||||
--Apple-Mail=_33C8180A-B097-4B87-A925-441300BDB9C9--
|
|
@ -492,6 +492,13 @@ class MailHandlerTest < ActiveSupport::TestCase
|
|||
assert_equal 'd8e8fca2dc0f896fd7cb4cb0031ba249', attachment.digest
|
||||
end
|
||||
|
||||
def test_multiple_text_parts
|
||||
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_add_issue_with_iso_8859_1_subject
|
||||
issue = submit_email(
|
||||
'subject_as_iso-8859-1.eml',
|
||||
|
|
Loading…
Reference in New Issue