Improved error handling of invalid emails.
This commit is contained in:
parent
56846b2fe9
commit
e376a0f872
2 changed files with 37 additions and 3 deletions
|
@ -381,7 +381,7 @@ class Channel::EmailParser
|
||||||
filename = if mail_local[:subject].present?
|
filename = if mail_local[:subject].present?
|
||||||
"#{mail_local[:subject]}.eml"
|
"#{mail_local[:subject]}.eml"
|
||||||
elsif headers_store['Content-Description'].present?
|
elsif headers_store['Content-Description'].present?
|
||||||
"#{headers_store['Content-Description']}.eml"
|
"#{headers_store['Content-Description']}.eml".to_s.force_encoding('utf-8')
|
||||||
else
|
else
|
||||||
'Mail.eml'
|
'Mail.eml'
|
||||||
end
|
end
|
||||||
|
@ -415,7 +415,7 @@ class Channel::EmailParser
|
||||||
map.each do |type, ext|
|
map.each do |type, ext|
|
||||||
next if headers_store['Content-Type'] !~ /^#{Regexp.quote(type)}/i
|
next if headers_store['Content-Type'] !~ /^#{Regexp.quote(type)}/i
|
||||||
filename = if headers_store['Content-Description'].present?
|
filename = if headers_store['Content-Description'].present?
|
||||||
"#{headers_store['Content-Description']}.#{ext[0]}"
|
"#{headers_store['Content-Description']}.#{ext[0]}".to_s.force_encoding('utf-8')
|
||||||
else
|
else
|
||||||
"#{ext[1]}.#{ext[0]}"
|
"#{ext[1]}.#{ext[0]}"
|
||||||
end
|
end
|
||||||
|
@ -661,11 +661,15 @@ returns
|
||||||
|
|
||||||
# store attachments
|
# store attachments
|
||||||
mail[:attachments]&.each do |attachment|
|
mail[:attachments]&.each do |attachment|
|
||||||
|
filename = attachment[:filename].force_encoding('utf-8')
|
||||||
|
if !filename.force_encoding('UTF-8').valid_encoding?
|
||||||
|
filename = filename.encode('utf-8', 'binary', invalid: :replace, undef: :replace, replace: '?')
|
||||||
|
end
|
||||||
Store.add(
|
Store.add(
|
||||||
object: 'Ticket::Article',
|
object: 'Ticket::Article',
|
||||||
o_id: article.id,
|
o_id: article.id,
|
||||||
data: attachment[:data],
|
data: attachment[:data],
|
||||||
filename: attachment[:filename],
|
filename: filename,
|
||||||
preferences: attachment[:preferences]
|
preferences: attachment[:preferences]
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
|
@ -2669,6 +2669,36 @@ Some Text',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
data: IO.binread('test/fixtures/mail64.box'),
|
||||||
|
success: true,
|
||||||
|
result: {
|
||||||
|
0 => {
|
||||||
|
priority: '2 normal',
|
||||||
|
title: 'AW: OTRS / Anfrage OTRS Einführung/Präsentation [Ticket#11545]',
|
||||||
|
},
|
||||||
|
1 => {
|
||||||
|
from: 'Martin Edenhofer <martin@example.de>',
|
||||||
|
sender: 'Customer',
|
||||||
|
type: 'email',
|
||||||
|
body: 'Enjoy!<div>
|
||||||
|
<br><div>-Martin<br><span class="js-signatureMarker"></span><br>--<br>Old programmers never die. They just branch to a new address.<br>
|
||||||
|
</div>
|
||||||
|
<br><div><img src="cid:485376C9-2486-4351-B932-E2010998F579@home" style="width:640px;height:425px;"></div>
|
||||||
|
</div>',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
verify: {
|
||||||
|
users: [
|
||||||
|
{
|
||||||
|
firstname: 'Martin',
|
||||||
|
lastname: 'Edenhofer',
|
||||||
|
fullname: 'Martin Edenhofer',
|
||||||
|
email: 'martin@example.de',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
]
|
]
|
||||||
assert_process(files)
|
assert_process(files)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue