Fixed #2390 - Add a filter to not show emails with potential issue - Display a…
This commit is contained in:
parent
0c97a66d6a
commit
77794e0b26
2 changed files with 32 additions and 2 deletions
|
@ -6,6 +6,7 @@ class Channel::EmailParser
|
|||
EMAIL_REGEX = /.+@.+/
|
||||
RECIPIENT_FIELDS = %w[to cc delivered-to x-original-to envelope-to].freeze
|
||||
SENDER_FIELDS = %w[from reply-to return-path sender].freeze
|
||||
EXCESSIVE_LINKS_MSG = 'This message cannot be displayed because it contains over 5,000 links. Download the raw message below and open it via an Email client if you still wish to view it.'.freeze
|
||||
|
||||
=begin
|
||||
|
||||
|
@ -542,9 +543,13 @@ process unprocessable_mails (tmp/unprocessable_mail/*.eml) again
|
|||
body_text = body_text.utf8_encode(from: message.charset, fallback: :read_as_sanitized_binary)
|
||||
body_text = Mail::Utilities.to_lf(body_text)
|
||||
|
||||
return body_text.html2html_strict if options[:strict_html]
|
||||
# plaintext body requires no processing
|
||||
return body_text if !options[:strict_html]
|
||||
|
||||
body_text
|
||||
# Issue #2390 - emails with >5k HTML links should be rejected
|
||||
return EXCESSIVE_LINKS_MSG if body_text.scan(/<a[[:space:]]/i).count >= 5_000
|
||||
|
||||
body_text.html2html_strict
|
||||
end
|
||||
|
||||
def collect_attachments(mail)
|
||||
|
|
|
@ -138,5 +138,30 @@ RSpec.describe Channel::EmailParser, type: :model do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'mail with links' do
|
||||
|
||||
def mock_mail(number_of_links)
|
||||
link = '<a href="https://zammad.com/">Dummy Link</a> '
|
||||
|
||||
mail = Mail.new
|
||||
mail.html_part = "<html><body>#{link * number_of_links}</body></html>"
|
||||
mail
|
||||
end
|
||||
|
||||
let(:mail_10) { mock_mail(10).to_s }
|
||||
let(:mail_5k) { mock_mail(5001).to_s }
|
||||
|
||||
# regression test for issue 2390 - Add a postmaster filter to not show emails with potential issue
|
||||
it '(>5k links) are replaced by a warning message' do
|
||||
expect( described_class.new.parse(mail_5k)[:body] )
|
||||
.to eql( Channel::EmailParser::EXCESSIVE_LINKS_MSG )
|
||||
end
|
||||
|
||||
it '(10 links) are not touched' do
|
||||
expect( described_class.new.parse(mail_10)[:body] )
|
||||
.to start_with( '<a href="https://zammad.com/"' )
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue