mirror of
https://github.com/redmine/redmine.git
synced 2025-11-08 14:26:04 +01:00
Mail parts with empty content should be ignored (#25256).
Patch by Felix Schäfer. git-svn-id: http://svn.redmine.org/redmine/trunk@16371 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -445,19 +445,21 @@ class MailHandler < ActionMailer::Base
|
|||||||
def plain_text_body
|
def plain_text_body
|
||||||
return @plain_text_body unless @plain_text_body.nil?
|
return @plain_text_body unless @plain_text_body.nil?
|
||||||
|
|
||||||
parts = if (text_parts = email.all_parts.select {|p| p.mime_type == 'text/plain'}).present?
|
@plain_text_body = email_parts_to_text(email.all_parts.select {|p| p.mime_type == 'text/plain'}).presence
|
||||||
text_parts
|
|
||||||
elsif (html_parts = email.all_parts.select {|p| p.mime_type == 'text/html'}).present?
|
@plain_text_body ||= email_parts_to_text(email.all_parts.select {|p| p.mime_type == 'text/html'}).presence
|
||||||
html_parts
|
|
||||||
else
|
@plain_text_body ||= email_parts_to_text([email])
|
||||||
[email]
|
|
||||||
|
@plain_text_body
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def email_parts_to_text(parts)
|
||||||
parts.reject! do |part|
|
parts.reject! do |part|
|
||||||
part.attachment?
|
part.attachment?
|
||||||
end
|
end
|
||||||
|
|
||||||
@plain_text_body = parts.map do |p|
|
parts.map do |p|
|
||||||
body_charset = Mail::RubyVer.respond_to?(:pick_encoding) ?
|
body_charset = Mail::RubyVer.respond_to?(:pick_encoding) ?
|
||||||
Mail::RubyVer.pick_encoding(p.charset).to_s : p.charset
|
Mail::RubyVer.pick_encoding(p.charset).to_s : p.charset
|
||||||
|
|
||||||
@@ -465,8 +467,6 @@ class MailHandler < ActionMailer::Base
|
|||||||
# convert html parts to text
|
# convert html parts to text
|
||||||
p.mime_type == 'text/html' ? self.class.html_body_to_text(body) : self.class.plain_text_body_to_text(body)
|
p.mime_type == 'text/html' ? self.class.html_body_to_text(body) : self.class.plain_text_body_to_text(body)
|
||||||
end.join("\r\n")
|
end.join("\r\n")
|
||||||
|
|
||||||
@plain_text_body
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def cleaned_up_text_body
|
def cleaned_up_text_body
|
||||||
|
|||||||
36
test/fixtures/mail_handler/empty_text_part.eml
vendored
Normal file
36
test/fixtures/mail_handler/empty_text_part.eml
vendored
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
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 an empty text part
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
--Apple-Mail=_33C8180A-B097-4B87-A925-441300BDB9C9
|
||||||
|
Content-Transfer-Encoding: quoted-printable
|
||||||
|
Content-Type: text/html;
|
||||||
|
charset=us-ascii
|
||||||
|
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww=
|
||||||
|
w.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns=3D"http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dutf-8" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<p>The html part.</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
||||||
|
|
||||||
|
--Apple-Mail=_33C8180A-B097-4B87-A925-441300BDB9C9--
|
||||||
@@ -623,6 +623,11 @@ class MailHandlerTest < ActiveSupport::TestCase
|
|||||||
assert_include 'third', issue.description
|
assert_include 'third', issue.description
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_empty_text_part_should_not_stop_looking_for_content
|
||||||
|
issue = submit_email('empty_text_part.eml', :issue => {:project => 'ecookbook'})
|
||||||
|
assert_equal 'The html part.', issue.description
|
||||||
|
end
|
||||||
|
|
||||||
def test_attachment_text_part_should_be_added_as_issue_attachment
|
def test_attachment_text_part_should_be_added_as_issue_attachment
|
||||||
issue = submit_email('multiple_text_parts.eml', :issue => {:project => 'ecookbook'})
|
issue = submit_email('multiple_text_parts.eml', :issue => {:project => 'ecookbook'})
|
||||||
assert_not_include 'Plain text attachment', issue.description
|
assert_not_include 'Plain text attachment', issue.description
|
||||||
|
|||||||
Reference in New Issue
Block a user