メール送信用のEMLファイルを作成しようとしていますが、
EMLファイルの宛先の日本語がOutlookで文字化けしてしまい対処方法がわからなく困っています。
Thunderbirdでは発生していません。
使用文字コードはUTF-8です。
Thunderbirdで受信したファイルを開くと日本語がエンコードされているようなのでエンコードが必要かもしれませんが、
調べたこと
宛先の日本語はBase64エンコードされているようです、これが答えになったのかもしれませんが。
txt
1abc@test.com 2↓ 35pel5pys6KqeMSA8YWJjQHRlc3QuY29tPg== 4 5// 先頭と末尾に "=?UTF-8?B?" "?=" それぞれが必要かも 6// =?UTF-8?B? 5pel5pys6KqeMSA8YWJjQHRlc3QuY29tPg== ?=
eml
1Content-Type: text/plain; charset="UTF-8" 2To: 日本語1 <abc@test.com> 3Cc: 日本語2 <abc2@test.com> 4Bcc: 日本語3 <abc3@test.com> 5Subject: Mail test 日本語テスト1 6X-Unsent: 1 7 8Mail test 日本語テスト2
「Quoted-Printable」っていうMIMEエンコードのやり方を調べてみてください。Base64エンコードとは違います。
教えていただき、ありがとうございます。
「Quoted-Printable」っていうMIMEエンコードのやり方があるのですね。
メールのデコード処理の流れ
https://qiita.com/takey/items/13a3dee5d78d364dd55c
の記事に知りたい情報がありそうな感じでした。
--
?[文字コード]?[Content-Transfer-Encoding]?[メッセージ]
文字コードがUTF-8で、Base64変換されている場合
b"From: =?UTF-8?B?44CQQVdTIOOCp...?="
--
Quoted-PrintableっていうMIMEエンコードの変換ツールで変換してみましたが、
正しい結果になりません。
https://www.en-pc.jp/tech/quoted-printable.php#result
Base64でエンコードするとほしい値にはなったのですが。
どのようにすれば正しいかわかりますか?
ここは間違いのため削除
Thunderbirdの下書きの最小のemlを検証しました。今度はSubjectがBase64エンコードされていました。
---
Date: Thu, 7 Jul 2022 08:58:22 +0900
MIME-Version: 1.0
Content-Language: en-US
To: =?UTF-8?B?aaa?= <xxx@xxx.co.jp>
From: =?UTF-8?B?aaa?= <xxx@xxx.co.jp>
Subject: =?UTF-8?B?5pel5pys6Kqe44OG44K544OIMQ==?=
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
日本語テスト2
---
以下は下書き保存時に追加されたものだと思われるので削除しました。
---
X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
Message-ID: <xxx@xxx.co.jp>
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101
Thunderbird/91.11.0
X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0;
attachmentreminder=0; deliveryformat=4
X-Identity-Key: id2
Fcc: mailbox://xxx@xxx.co.jp/Sent
---
そのため、いまのところはThunderbirdの下書きの最小のemlを使用したいと思います。
「Quoted-Printable」のMIMEエンコードではうまくいきません。
Base64エンコードであれば、エンコード文字の前後に " =?UTF-8?B?"、"?="を追加すれはうまく動作します。
エンコード方法のおかしなところがあればご指摘下さい。
To: Cc: BCC: は、届けばいいって言うだけならメールアドレスだけでいいです。日本語などの宛先名をちゃんとつけようとすると、メールアドレスを<>で括った上でQuoted-Printableを使ったMIMEエンコードをすることになるものだと思われます。URL、MIME、BASE64エンコードツール http://tool.mwsoft.jp/web/urlencode.html Quoted-Printable の仕組み https://ez-net.jp/article/78/LlqN6mlJ/qLMFkFotD03X/
いまのところBase64エンコードであれば、エンコード文字の前後に " =?UTF-8?B?"、"?=" につけるだけで、日本語の表示名をつけることができるようです。
ご指摘の 「メールアドレスを<>で括った上でQuoted-Printableを使ったMIMEエンコードをする」 部分について検証してみたいと思います。
メールアドレスの日本語表示名でわかったことをご連絡します。
いまのところ
②Base64エンコード (エンコード文字の前後に "=?UTF-8?B?"、"?="を後で付加)
③MIMEエンコード(Quoted-Printable)
のどちらでも表示できるようです。
--
①Base64エンコード
=5pel5pys6KqeMQ== <test1@xxx.co.jp>
②Base64エンコード (エンコード文字の前後に "=?UTF-8?B?"、"?="を後で付加)
=?UTF-8?B?5pel5pys6KqeMQ==?= <test1@xxx.co.jp>
③MIMEエンコード(Quoted-Printable)
=?ISO-2022-JP?B?GyRCRnxLXDhsGyhCMg==?= <test2@xxx.co.jp>
※③は "=?ISO-2022-JP?B?"、"?="をつけてくれるので②より簡単かも
Thunderbird、Outlookの両方で動作を確認しました。
--
答えは RFC 2047:MIME Part Three: Message Header Extensions for Non-ASCII Text で確認しました。https://datatracker.ietf.org/doc/html/rfc2047 "=?UTF-8?B?"で始まるのは、UTF-8をBエンコードするという意味になりBase64、"=?UTF-8?Q?"で始まるのはQエンコードするという意味になりQuoted-Printableを使うということになると。エンコードした文字列を使って、encoded-word = "=?" charset "?" encoding "?" encoded-text "?=" にはめて連結すればOK。
ドキュメントは英語のことと、内容が難しすぎて、理解できませんでしたが、
エンコードのことはとても勉強になりました。
ありがとうございます。解決しました。
回答2件
あなたの回答
tips
プレビュー