質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Email

Email(電子メール)とは、ネットワークを介してメッセージを送受信するシステム。インターネット上で利用するメールを、Emailと呼ぶ場合が多いです。 インターネットの普及に伴い、現在では一般的なサービスとなっています。文字の他にも、画像、音声、プログラムなどを送受信することが可能です。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

Q&A

解決済

2回答

2750閲覧

EMLファイルの宛先の日本語がOutlookで文字化けしてしまい対処方法がわからなく困っています。

mee12

総合スコア101

Email

Email(電子メール)とは、ネットワークを介してメッセージを送受信するシステム。インターネット上で利用するメールを、Emailと呼ぶ場合が多いです。 インターネットの普及に伴い、現在では一般的なサービスとなっています。文字の他にも、画像、音声、プログラムなどを送受信することが可能です。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

0グッド

0クリップ

投稿2022/07/06 02:52

編集2022/07/06 03:34

メール送信用のEMLファイルを作成しようとしていますが、

EMLファイルの宛先の日本語がOutlookで文字化けしてしまい対処方法がわからなく困っています。
Thunderbirdでは発生していません。

使用文字コードはUTF-8です。
Thunderbirdで受信したファイルを開くと日本語がエンコードされているようなのでエンコードが必要かもしれませんが、

調べたこと
宛先の日本語はBase64エンコードされているようです、これが答えになったのかもしれませんが。

txt

1abc@test.com 235pel5pys6KqeMSA8YWJjQHRlc3QuY29tPg== 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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/07/06 07:59

「Quoted-Printable」っていうMIMEエンコードのやり方を調べてみてください。Base64エンコードとは違います。
mee12

2022/07/06 10:18 編集

教えていただき、ありがとうございます。 「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でエンコードするとほしい値にはなったのですが。 どのようにすれば正しいかわかりますか?
mee12

2022/07/07 00:05 編集

ここは間違いのため削除
mee12

2022/07/07 00:16 編集

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?"、"?="を追加すれはうまく動作します。 エンコード方法のおかしなところがあればご指摘下さい。
退会済みユーザー

退会済みユーザー

2022/07/07 00:14

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/
mee12

2022/07/07 00:19

いまのところBase64エンコードであれば、エンコード文字の前後に " =?UTF-8?B?"、"?=" につけるだけで、日本語の表示名をつけることができるようです。 ご指摘の 「メールアドレスを<>で括った上でQuoted-Printableを使ったMIMEエンコードをする」 部分について検証してみたいと思います。
mee12

2022/07/07 00:46 編集

メールアドレスの日本語表示名でわかったことをご連絡します。 いまのところ ②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の両方で動作を確認しました。 --
退会済みユーザー

退会済みユーザー

2022/07/07 00:51 編集

答えは 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。
mee12

2022/07/07 00:57 編集

ドキュメントは英語のことと、内容が難しすぎて、理解できませんでしたが、 エンコードのことはとても勉強になりました。 ありがとうございます。解決しました。
guest

回答2

0

自己解決

emlファイルをThunderbird、Outlookの両方で動作確認しました。

Thunderbirdのテキスト形式の下書きで作られたemlファイルから最小のものを構築しました。
実際にjavascriptで動いたコードを記載します。

(注意事項)
・宛先の日本語表示名はBase64エンコード(エンコード文字の前後に "=?UTF-8?B?"、"?="を後で付加)、またはMIMEエンコードをする
・宛先の文字の頭には必ず半角スペースを入れ、宛先に2件目以降をいれるときはカンマ、改行で区切る必要がある
・SubjectはBase64エンコード(エンコード文字の前後に "=?UTF-8?B?"、"?="を後で付加)、またはMIMEエンコードをする
・ファイルはUTF-8のBOM無しで保存する

js

1// 宛先のBase64エンコード方法 2let toBase64Encode = window.btoa(String.fromCharCode.apply(null, new TextEncoder().encode("日本語の名前"))); 3let to += " =?UTF-8?B?" + toBase64Encode + "?= <"test@test.com">,\n"; 4 5let cc = ""; 6let bcc = ""; 7 8// SubjectのBase64エンコード方法 9let subjectBase64Encode = window.btoa(String.fromCharCode.apply(null, new TextEncoder().encode("件名をここにいれる"))); 10let subject = "=?UTF-8?B?" + subjectBase64Encode + "?= <"test@test.com">"; 11 12let body = "本文をここにいれる"; 13 14// emlTextの作成 15let emlText = "Date: " + luxon.DateTime.now().toRFC2822() + "\n"; 16emlText += "MIME-Version: 1.0\n"; 17emlText += "Content-Language: en-US\n"; 18emlText += (to ? "To:" + to : ""); 19emlText += (cc ? "Cc:" + cc : ""); 20emlText += (bcc ? "Bcc:" + bcc : ""); 21emlText += "Subject: " + subject + "\n"; 22emlText += "Content-Type: text/plain; charset=UTF-8; format=flowed\n"; 23emlText += "Content-Transfer-Encoding: 8bit\n"; 24emlText += "\n"; 25emlText += body; 26 27// BOM無しBlogオブジェクトを作成、emlファイルとしてダウンロード 28let blob = new Blob([emlText], { type: "text/plain" }); 29 30let url = (window.URL || window.webkitURL).createObjectURL(blob); 31let link = document.createElement("a"); 32 33link.download = luxon.DateTime.now().toFormat("yyyyMMdd-HHmmss.SSS-") + subject + ".eml"; 34link.href = url; 35document.body.appendChild(link); 36link.click(); 37document.body.removeChild(link);

投稿2022/07/07 01:01

mee12

総合スコア101

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mee12

2022/07/07 04:54

コードに誤りがありましたので訂正します (誤)let subject = "=?UTF-8?B?" + subjectBase64Encode + "?= <"test@test.com">"; ↓ (正)let subject = "=?UTF-8?B?" + subjectBase64Encode + "?=";
mee12

2022/07/11 03:55 編集

すみませんが、コードに不足がありましたので追加します。 let emlText = "X-Unsent: 1\n"; これをemlの先頭に入れることで、Thunderbird、Outlookで開いたときに送信画面で開いてくれます。
guest

0

Content-Type: text/plain; charset="UTF-8" で解決できました

投稿2022/07/06 02:56

mee12

総合スコア101

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mee12

2022/07/07 00:50 編集

内容の修正↓
mee12

2022/07/07 00:44 編集

内容の修正↓
mee12

2022/07/07 01:02 編集

コードの挿入ができなかったため自己解決の回答を移動しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問