diff --git a/lib/email/html_cleaner.rb b/lib/email/html_cleaner.rb index 19e4b417327..b4333ae91d2 100644 --- a/lib/email/html_cleaner.rb +++ b/lib/email/html_cleaner.rb @@ -74,9 +74,20 @@ module Email private def add_newlines(doc) + # Replace
tags with a markdown \n doc.xpath('//br').each do |br| - br.replace(Nokogiri::XML::Text.new("\n", doc)) + br.replace(new_linebreak_node doc) end + # Surround

tags with newlines, to help with line-wise postprocessing + # and ensure markdown paragraphs + doc.xpath('//p').each do |p| + p.before(new_linebreak_node doc) + p.after(new_linebreak_node doc, 2) + end + end + + def new_linebreak_node(doc, count=1) + Nokogiri::XML::Text.new("\n" * count, doc) end def trim_process_node(node) diff --git a/lib/email/receiver.rb b/lib/email/receiver.rb index e9d09024cd7..03094c3a3af 100644 --- a/lib/email/receiver.rb +++ b/lib/email/receiver.rb @@ -159,7 +159,8 @@ module Email (l =~ /via #{SiteSetting.title}(.*)\:$/) || # This one might be controversial but so many reply lines have years, times and end with a colon. # Let's try it and see how well it works. - (l =~ /\d{4}/ && l =~ /\d:\d\d/ && l =~ /\:$/) + (l =~ /\d{4}/ && l =~ /\d:\d\d/ && l =~ /\:$/) || + (l =~ /On \w+ \d+,? \d+,?.*wrote:/) # Headers on subsequent lines break if (0..2).all? { |off| lines[idx+off] =~ REPLYING_HEADER_REGEX }