Fixes #3115 - Zammad can't import specific ISO-2022-JP mails
This commit is contained in:
parent
ed6258f738
commit
66c0c4f513
4 changed files with 89 additions and 2 deletions
|
@ -512,13 +512,27 @@ process unprocessable_mails (tmp/unprocessable_mail/*.eml) again
|
||||||
def force_single_part_encoding_if_needed(part)
|
def force_single_part_encoding_if_needed(part)
|
||||||
return if part.charset != 'iso-2022-jp'
|
return if part.charset != 'iso-2022-jp'
|
||||||
|
|
||||||
part.body = part.body.encoded.unpack1('M').tr('_', ' ').force_encoding('ISO-2022-JP').encode('UTF-8')
|
part.body = part.body.encoded.unpack1('M').force_encoding('ISO-2022-JP').encode('UTF-8')
|
||||||
|
end
|
||||||
|
|
||||||
|
ISO2022JP_REGEXP = /=\?ISO-2022-JP\?B\?(.+?)\?=/.freeze
|
||||||
|
|
||||||
|
# https://github.com/zammad/zammad/issues/3115
|
||||||
|
def header_field_unpack_japanese(field)
|
||||||
|
field.value.gsub ISO2022JP_REGEXP do
|
||||||
|
Base64.decode64($1).force_encoding('SJIS').encode('UTF-8')
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def message_header_hash(mail)
|
def message_header_hash(mail)
|
||||||
imported_fields = mail.header.fields.map do |f|
|
imported_fields = mail.header.fields.map do |f|
|
||||||
begin
|
begin
|
||||||
value = f.to_utf8
|
value = if f.value.match?(ISO2022JP_REGEXP)
|
||||||
|
header_field_unpack_japanese(f)
|
||||||
|
else
|
||||||
|
f.to_utf8
|
||||||
|
end
|
||||||
|
|
||||||
if value.blank?
|
if value.blank?
|
||||||
value = f.decoded.to_utf8
|
value = f.decoded.to_utf8
|
||||||
end
|
end
|
||||||
|
|
27
test/data/mail/mail091.yml
Normal file
27
test/data/mail/mail091.yml
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
|
||||||
|
from: '"岡本和正" <mail@domain.jp>'
|
||||||
|
from_email: mail@domain.jp
|
||||||
|
from_display_name: 岡本和正
|
||||||
|
to: '"support@ourdomain.com" <support@ourdomain.com>'
|
||||||
|
subject: メルマガ解除
|
||||||
|
body: "<div>このアドレスへのメルマガを解除してください。</div>"
|
||||||
|
content_type: text/html
|
||||||
|
attachments:
|
||||||
|
- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
|
||||||
|
data: |
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-2022-jp">
|
||||||
|
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
|
||||||
|
</head>
|
||||||
|
<body dir="ltr">
|
||||||
|
<div style="font-family: Meiryo, メイリオ, "Hiragino Sans", sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
|
||||||
|
このアドレスへのメルマガを解除してください。</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
filename: message.html
|
||||||
|
preferences: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
|
||||||
|
content-alternative: true
|
||||||
|
original-format: true
|
||||||
|
Mime-Type: text/html
|
||||||
|
Charset: iso-2022-jp
|
28
test/data/mail/mail093.box
Normal file
28
test/data/mail/mail093.box
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
Return-Path: <bar@example.org>
|
||||||
|
Received: by example.com (Postfix, from userid 0)
|
||||||
|
id 123; Wed, 31 Jul 2020 11:38:04 +0900 (JST)
|
||||||
|
To: =?ISO-2022-JP?B?iXeWa4z7IA==?= <foo@example.com>
|
||||||
|
Subject: ƒc<C692>[ƒ‹
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: multipart/alternative; boundary="--799140365efbe012d87669.81669397"
|
||||||
|
Content-Transfer-Encoding: quoted-printable
|
||||||
|
From: =?ISO-2022-JP?B?g2OBW4OLIEVYQU1QTEU=?= <bar@example.org>
|
||||||
|
Message-Id: <123@example.org>
|
||||||
|
Date: Wed, 31 Jul 2020 11:38:04 +0900 (JST)
|
||||||
|
|
||||||
|
----799140365efbe012d87669.81669397
|
||||||
|
Content-Type: text/html; charset=iso-2022-jp
|
||||||
|
Content-Disposition: inline
|
||||||
|
Content-Transfer-Encoding: quoted-printable
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns=3D"http://www.w3.org/1999/xhtml">
|
||||||
|
<body>
|
||||||
|
=1B$B!!:#$J$i!"=1B(B<span>=1B$B@hCe=1B(B100=1B$B;\@_8BDj=1B(B</span=
|
||||||
|
>=1B$B$G=1B(B<br>=20
|
||||||
|
=1B$B!!=1B(B<span>=1B$BL5NA%P!<%8%g%s=1B(B</span>=1B$B$rF3F~$$$?=
|
||||||
|
$@$1$^$9!#=1B(B
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
----799140365efbe012d87669.81669397--
|
||||||
|
|
18
test/data/mail/mail093.yml
Normal file
18
test/data/mail/mail093.yml
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
|
||||||
|
from: ツール EXAMPLE <bar@example.org>
|
||||||
|
from_email: bar@example.org
|
||||||
|
from_display_name: ツール EXAMPLE
|
||||||
|
to: 駅北口 <foo@example.com>
|
||||||
|
subject: ツール
|
||||||
|
body: 今なら、先着100施設限定で<br> 無料バージョンを導入いただけます。
|
||||||
|
content_type: text/html
|
||||||
|
attachments:
|
||||||
|
- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
|
||||||
|
data: "<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<body>\n 今なら、<span>先着100施設限定</span>で<br>
|
||||||
|
\n <span>無料バージョン</span>を導入いただけます。\n</body>\n</html>"
|
||||||
|
filename: message.html
|
||||||
|
preferences: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
|
||||||
|
content-alternative: true
|
||||||
|
original-format: true
|
||||||
|
Mime-Type: text/html
|
||||||
|
Charset: iso-2022-jp
|
Loading…
Reference in a new issue