Fix: parse verification mail (#3864)
Email parsing logic was stripping of HTML tables which was causing the issue in this case. Fixes: #3731
This commit is contained in:
parent
13eaff156a
commit
1467a8fa33
3 changed files with 23 additions and 4 deletions
|
@ -5,7 +5,7 @@ module MailboxHelper
|
|||
@message = @conversation.messages.create(
|
||||
account_id: @conversation.account_id,
|
||||
sender: @conversation.contact,
|
||||
content: processed_mail.text_content[:reply],
|
||||
content: mail_content,
|
||||
inbox_id: @conversation.inbox_id,
|
||||
message_type: 'incoming',
|
||||
content_type: 'incoming_email',
|
||||
|
@ -48,4 +48,12 @@ module MailboxHelper
|
|||
# notification emails are send via mailer sender email address. so it should match
|
||||
@processed_mail.original_sender == Mail::Address.new(ENV.fetch('MAILER_SENDER_EMAIL', 'Chatwoot <accounts@chatwoot.com>')).address
|
||||
end
|
||||
|
||||
def mail_content
|
||||
if processed_mail.text_content.present?
|
||||
processed_mail.text_content[:reply]
|
||||
elsif processed_mail.html_content.present?
|
||||
processed_mail.html_content[:reply]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -15,7 +15,6 @@ class HtmlParser
|
|||
|
||||
def filter_replies!
|
||||
document.xpath('//blockquote').each { |n| n.replace('> ') }
|
||||
document.xpath('//table').each(&:remove)
|
||||
end
|
||||
|
||||
def filtered_html
|
||||
|
|
|
@ -27,15 +27,16 @@ class MailPresenter < SimpleDelegator
|
|||
end
|
||||
|
||||
# returns encoded mail body text_part if available.
|
||||
# returns encoded mail body as it is if mail_part not available.
|
||||
# else returns parsed the html body if contains text/html content.
|
||||
def select_body(mail_part)
|
||||
return '' unless mail_part
|
||||
return encoded_mail_body unless mail_part
|
||||
|
||||
decoded = encode_to_unicode(mail_part.decoded)
|
||||
|
||||
if mail.text_part
|
||||
decoded
|
||||
elsif (mail.content_type || '').include? 'text/html'
|
||||
elsif html_mail_body?
|
||||
::HtmlParser.parse_reply(decoded)
|
||||
end
|
||||
end
|
||||
|
@ -128,4 +129,15 @@ class MailPresenter < SimpleDelegator
|
|||
rescue StandardError
|
||||
''
|
||||
end
|
||||
|
||||
def html_mail_body?
|
||||
((mail.content_type || '').include? 'text/html') || @mail.html_part || @mail.html_part.content_type.include?('text/html')
|
||||
end
|
||||
|
||||
# returns mail body if mail content_type is text/plain
|
||||
def encoded_mail_body
|
||||
return encode_to_unicode(@mail.body.decoded) if (@mail.content_type || '').include? 'text/plain'
|
||||
|
||||
''
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue