diff --git a/lib/email/receiver.rb b/lib/email/receiver.rb index bb5576a5ad8..b29baf9a555 100644 --- a/lib/email/receiver.rb +++ b/lib/email/receiver.rb @@ -261,9 +261,16 @@ module Email end markdown, elided_markdown = if html.present? - markdown = HtmlToMarkdown.new(html, keep_img_tags: true, keep_cid_imgs: true).to_markdown - markdown = trim_discourse_markers(markdown) - trim_reply_and_extract_elided(markdown) + if html[%{
}] + html, elided_html = extract_gmail_quote(html) + markdown = HtmlToMarkdown.new(html, keep_img_tags: true, keep_cid_imgs: true).to_markdown + elided_markdown = HtmlToMarkdown.new(elided_html).to_markdown + [markdown, elided_markdown] + else + markdown = HtmlToMarkdown.new(html, keep_img_tags: true, keep_cid_imgs: true).to_markdown + markdown = trim_discourse_markers(markdown) + trim_reply_and_extract_elided(markdown) + end end if text.blank? || (SiteSetting.incoming_email_prefer_html && markdown.present?) @@ -273,6 +280,12 @@ module Email end end + def extract_gmail_quote(html) + doc = Nokogiri::HTML.fragment(html) + elided = doc.css("div.gmail_quote")[0].remove + [doc.to_html, elided.to_html] + end + def trim_reply_and_extract_elided(text) return [text, ""] if @opts[:skip_trimming] EmailReplyTrimmer.trim(text, true) diff --git a/spec/components/email/receiver_spec.rb b/spec/components/email/receiver_spec.rb index 838e3bb9b4e..4c3a562f928 100644 --- a/spec/components/email/receiver_spec.rb +++ b/spec/components/email/receiver_spec.rb @@ -191,6 +191,12 @@ describe Email::Receiver do expect(topic.posts.last.raw).to eq("This is a **HTML** reply ;)") end + it "automatically elides gmail quotes" do + SiteSetting.always_show_trimmed_content = true + expect { process(:gmail_html_reply) }.to change { topic.posts.count } + expect(topic.posts.last.raw).to eq("This is a **GMAIL** reply ;)\n\n
\n···\n\nThis is the *elided* part!\n\n
") + end + it "doesn't process email with same message-id more than once" do expect do process(:text_reply) diff --git a/spec/fixtures/emails/gmail_html_reply.eml b/spec/fixtures/emails/gmail_html_reply.eml new file mode 100644 index 00000000000..6a69a3f35b1 --- /dev/null +++ b/spec/fixtures/emails/gmail_html_reply.eml @@ -0,0 +1,17 @@ +Return-Path: +From: Foo Bar +To: alt+4f97315cc828096c9cb34c6f1a0d6fe8@bar.com +Date: Fri, 15 Jan 2016 00:12:43 +0100 +Message-ID: <180@foo.bar.mail> +Mime-Version: 1.0 +Content-Type: text/html; charset=UTF-8 +Content-Transfer-Encoding: quoted-printable + +
+
+

This is a GMAIL reply ;)

+
+
+

This is the elided part!

+
+