diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb index be4b363b1..23879c153 100755 --- a/app/models/mail_handler.rb +++ b/app/models/mail_handler.rb @@ -447,16 +447,25 @@ class MailHandler < ActionMailer::Base end end - # Returns the text/plain part of the email - # If not found (eg. HTML-only email), returns the body with tags removed + # Returns the text/plain or text/html(the body with tags removed) part of the email + # The preferred of parse depends on Setting.mail_handler_preferred_body_part + # * 'html' - first text/html, then text/plain + # * 'plain'(Default) - first text/plain, then text/html def plain_text_body return @plain_text_body unless @plain_text_body.nil? - # check if we have any plain-text parts with content - @plain_text_body = email_parts_to_text(email.all_parts.select {|p| p.mime_type == 'text/plain'}).presence - - # if not, we try to parse the body from the HTML-parts - @plain_text_body ||= email_parts_to_text(email.all_parts.select {|p| p.mime_type == 'text/html'}).presence + multipart_parse_order = + if Setting.mail_handler_preferred_body_part == 'html' + # HTML parts, plain-text parts + ['text/html', 'text/plain'] + else + # (Default) plain-text parts, HTML parts + ['text/plain', 'text/html'] + end + multipart_parse_order.each do |mime_type| + @plain_text_body ||= email_parts_to_text(email.all_parts.select {|p| p.mime_type == mime_type}).presence + return @plain_text_body unless @plain_text_body.nil? + end # If there is still no body found, and there are no mime-parts defined, # we use the whole raw mail body diff --git a/app/views/settings/_mail_handler.html.erb b/app/views/settings/_mail_handler.html.erb index 36fa864bb..d14593da1 100644 --- a/app/views/settings/_mail_handler.html.erb +++ b/app/views/settings/_mail_handler.html.erb @@ -18,6 +18,7 @@ <%= l(:text_comma_separated) %> <%= l(:label_example) %>: smime.p7s, *.vcf
+<%= setting_select :mail_handler_preferred_body_part, [['Text', 'plain'], ['HTML', 'html']] %>
The html part.
+ + + + +--Apple-Mail=_33C8180A-B097-4B87-A925-441300BDB9C9-- diff --git a/test/unit/mail_handler_test.rb b/test/unit/mail_handler_test.rb index 9d7fd6d12..916c43c2b 100644 --- a/test/unit/mail_handler_test.rb +++ b/test/unit/mail_handler_test.rb @@ -662,6 +662,17 @@ class MailHandlerTest < ActiveSupport::TestCase assert_equal '', issue.description end + def test_preferred_body_part_setting + with_settings :mail_handler_preferred_body_part => 'plain' do + issue = submit_email('text_and_html_part.eml', :issue => {:project => 'ecookbook'}) + assert_equal 'The text part.', issue.description + end + with_settings :mail_handler_preferred_body_part => 'html' do + issue = submit_email('text_and_html_part.eml', :issue => {:project => 'ecookbook'}) + assert_equal 'The html part.', issue.description + end + 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