diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml index a3ae889c646..426ae9289a6 100644 --- a/config/locales/server.en.yml +++ b/config/locales/server.en.yml @@ -1308,6 +1308,7 @@ en: reply_by_email_enabled: "Enable replying to topics via email." reply_by_email_address: "Template for reply by email incoming email address, for example: %{reply_key}@reply.example.com or replies+%{reply_key}@example.com" alternative_reply_by_email_addresses: "List of alternative templates for reply by email incoming email addresses. Example: %{reply_key}@reply.example.com|replies+%{reply_key}@example.com" + incoming_email_prefer_html: "Use the HTML instead of the text for incoming email." disable_emails: "Prevent Discourse from sending any kind of emails" diff --git a/config/site_settings.yml b/config/site_settings.yml index 6c916061601..826f0a7a145 100644 --- a/config/site_settings.yml +++ b/config/site_settings.yml @@ -646,6 +646,7 @@ email: pop3_polling_username: '' pop3_polling_password: '' log_mail_processing_failures: false + incoming_email_prefer_html: false email_in: default: false client: true diff --git a/lib/email/receiver.rb b/lib/email/receiver.rb index f87ca1bab64..562c232443a 100644 --- a/lib/email/receiver.rb +++ b/lib/email/receiver.rb @@ -188,17 +188,21 @@ module Email text = fix_charset(@mail) end - if text.present? + text, elided_text = if text.present? text = trim_discourse_markers(text) - text, elided = EmailReplyTrimmer.trim(text, true) - return [text, elided] + EmailReplyTrimmer.trim(text, true) end - if html.present? + markdown, elided_markdown = if html.present? markdown = HtmlToMarkdown.new(html).to_markdown markdown = trim_discourse_markers(markdown) - markdown, elided = EmailReplyTrimmer.trim(markdown, true) - return [markdown, elided] + EmailReplyTrimmer.trim(markdown, true) + end + + if text.blank? || (SiteSetting.incoming_email_prefer_html && markdown.present?) + return [markdown, elided_markdown] + else + return [text, elided_text] end end diff --git a/spec/components/email/receiver_spec.rb b/spec/components/email/receiver_spec.rb index e00fcc353a8..7895e6f4e3e 100644 --- a/spec/components/email/receiver_spec.rb +++ b/spec/components/email/receiver_spec.rb @@ -174,6 +174,18 @@ describe Email::Receiver do expect(topic.posts.last.raw).to eq("This is the *text* part.") end + it "prefers html over text when site setting is enabled" do + SiteSetting.incoming_email_prefer_html = true + expect { process(:text_and_html_reply) }.to change { topic.posts.count } + expect(topic.posts.last.raw).to eq('This is the **html** part.') + end + + it "uses text when prefer_html site setting is enabled but no html is available" do + SiteSetting.incoming_email_prefer_html = true + expect { process(:text_reply) }.to change { topic.posts.count } + expect(topic.posts.last.raw).to eq("This is a text reply :)") + end + it "removes the 'on , wrote' quoting line" do expect { process(:on_date_contact_wrote) }.to change { topic.posts.count } expect(topic.posts.last.raw).to eq("This is the actual reply.")