winmail.dat とは?Outlook が送ってくる理由と中身
winmail.dat は、受け取った側のメールソフトが読めなかった Outlook のメッセージの TNEF の部分です。Microsoft の説明と仕様書(MS-OXTNEF)に沿って、Outlook がどんなときに送るのか、見える人と見えない人がいる理由、中に何が入っているか、開き方と止め方をまとめます。
中の添付ファイルを今すぐ取り出す
このサイトの winmail.dat ビューアで、件名・差出人・本文を見て、中のファイルを保存できます。
ファイルはブラウザの中で読み取り、アップロードしません。
winmail.dat は、Outlook から届いたメールのうち、受け取った側のメールソフトが読めなかった部分です。送り主の Outlook(またはその裏の Exchange サーバー)が、メールの書式や、場合によっては添付ファイルまで、TNEF という Microsoft の形式にまとめて送っています。その形式を知らないメールソフトが、まとめたものをそのまま 1 つのファイルとして見せているのが winmail.dat です。本文はたいてい、別にテキストとして届いています。
名前が違うこともあります。Microsoft の文書には Win.dat という名前や、メールソフトがその部分をまったく認識できなかったときの ATT00008.DAT・ATT00005.eml のような名前も出てきます。
中身の形式「TNEF」
TNEF は Transport Neutral Encapsulation Format の略です。Microsoft の Exchange の文書では「MAPI メッセージ プロパティをカプセル化する Microsoft 固有の形式」と説明され、Outlook リッチ テキスト形式・Exchange リッチ テキスト形式とも呼ばれます。MAPI プロパティは、Outlook や Exchange がメールの情報を持つときの単位で、件名・差出人・いくつかの形の本文・添付ファイル・会議の情報などが、それぞれプロパティとして入っています。
インターネットのメールには、こうしたプロパティの多くを入れる場所がありません。そこで TNEF は、プロパティを 1 本のバイト列に並べ直し、対応していない仕組みの中を通して、受け取った側で元に戻せるようにします。Microsoft の仕様書が書いている TNEF の目的はこれです。このバイト列は、winmail.dat という名前の添付ファイルとして送るほか、application/ms-tnef という種類の MIME のパートとして送ったり、UUENCODE でテキストの本文の後ろに付けたりできます。
Microsoft 独自の形式ですが、秘密の形式ではありません。Microsoft は仕様書 [MS-OXTNEF] として公開していて、いちばん古い版は 2008 年 4 月の日付です。TNEF のデータは必ず次の 4 バイトで始まるので、ファイルの名前が何であっても、ソフトはここで TNEF だと見分けられます。
78 9F 3E 22 (仕様書ではこの印を 0x223E9F78 という数で書いています。TNEF は数を下位のバイトから順に書くので、ファイルの中では逆の並びになります。)
Outlook がどんなときに送るのか
Outlook では、メールを HTML 形式・テキスト形式・リッチ テキスト形式のどれかで書きます。Microsoft のサポート記事によると、Outlook の既定は HTML 形式で、リッチ テキストのときは TNEF を使ってメッセージの情報をまとめます。受け取る側のシステムが TNEF を扱えないと、Winmail.dat という添付ファイルが付きます。
リッチ テキストのメールが、いつも TNEF のまま出ていくわけではありません。Microsoft の Exchange の文書は、組織の外へ送るリッチ テキストのメールをどう扱うかを決める場所を 3 つ挙げています。上のものほど優先されます。
- 組織のリモート ドメインの設定(Exchange の管理者が、送り先のドメインごとに決める設定):「常に」なら TNEF を使い、「使用しない」なら使いません。既定の「ユーザーの設定に従う」は、下の 2 つに任せます。この呼び方は Exchange Server の文書のもので、Microsoft 365 の新しい Exchange 管理センターでは「なし」「ユーザー設定に従う」のように表示されます。
- Exchange のメール ユーザー・メール連絡先の設定:値は Always・Never と、ほかの設定に任せる既定値(UseDefaultSettings)の 3 つです。
- 送り主の Outlook の設定:「インターネット メッセージ形式」で、外部の宛先に送るリッチ テキストのメールの扱いを決めます。既定は「HTML 形式に変換」で、「Outlook リッチ テキスト形式を使用して送信」になっていると TNEF のまま送られます。Outlook 2010 以前には連絡先ごとの設定もあり、そこで「Outlook リッチ テキスト形式を使用して送信」を選んだ相手には TNEF のまま送られます。
これとは別に、Microsoft は TNEF が必要な Outlook の機能として、会議出席依頼と返信、投票ボタン、タスク要求、リッチ テキストの書式設定、埋め込み添付ファイルを挙げています。これらを使ったメールは、既定の形式が HTML でも TNEF で送られることがあります。普通の添付ファイルに TNEF は要らないので、Outlook を使っていない相手に添付ファイルを送るときは HTML かテキスト形式を手で選ぶよう、Microsoft は勧めています。
つまり winmail.dat が届く原因は、たいてい、メールがリッチ テキストで書かれていること、TNEF が要る機能を使っていること、どこかにリッチ テキストを TNEF のまま送る設定が残っていることのどれかです。それぞれの直し方はwinmail.dat を送らないようにする Outlook の設定にまとめています。
見える人と見えない人がいる理由
winmail.dat が見えるかどうかは、送り主だけでなく、受け取る側でメールが何を通るかでも変わります。
- Outlook と Web 版の Outlookは TNEF を読めます。Microsoft の Exchange の文書によると、Outlook はすべての版が TNEF に完全に対応していて、Web 版の Outlook も TNEF を変換して書式付きのメッセージを表示します。これらで読む人にはふつう winmail.dat が見えないので、送り主は気づきにくくなります。
- TNEF に対応していないメールソフトでは、同じ文書によると、たいていメッセージがテキストとして表示され、Winmail.dat か Win.dat が添付されます。
- メールサーバーが、配達の途中で TNEF の部分を取り除くこともあります。Microsoft はこれをよくあることとし、例に Exchange Server を挙げています。この場合、受け取る人にはテキストの本文だけが届き、winmail.dat は付きませんが、中に入っていたものも届きません。
同じメールを受け取っても、書式付きのメッセージが見える人、テキストと winmail.dat が見える人、テキストだけが見える人に分かれることになります。
中に入っているもの
Microsoft のサポート記事は、Winmail.dat に入っていることがあるものとして次を挙げています。
- 書式付きの本文(フォントや色)
- OLE オブジェクト(埋め込みの画像や Office 文書など)
- Outlook の特別な機能(カスタム フォーム、投票ボタン、会議出席依頼など)
- 送り主が付けた普通の添付ファイル
困るのはたいてい最後のものです。送り主が付けた PDF や Excel のファイルは、無くなったのではなく winmail.dat の中にあります。同じ記事によると、送り主の個人用フォルダー(.pst)ファイルのパスとサインイン名も winmail.dat に埋め込まれ、受け取った人がテキスト エディターなどで開くと見えます(パスワードは含まれません)。
テキストの本文は、ふつう winmail.dat には入っていません。仕様書によると、TNEF を MIME のパートとして送るときは、テキストの本文は別の MIME のパートで送られます。winmail.dat が読めなくても本文だけは読めるのはこのためです。
ファイルの中は、「属性」と呼ばれるレコードが平たく並んだ作りです。先頭の 4 バイトの印の後に、使われなくなったキー、版、文字のコードページが続き、メッセージの属性、続いて添付ファイルごとの属性のまとまりが並びます。どの属性も、メッセージと添付ファイルのどちらのものか、何の属性か、長さ、データ、16 ビットのチェックサムの順に書かれています。主なものを [MS-OXTNEF] から挙げます。
| 属性 | 対象 | 中身 |
|---|---|---|
attSubject | メッセージ | 件名 |
attMsgProps | メッセージ | メッセージの MAPI プロパティをいくつでも(書式付きの本文もここ) |
attAttachRendData | 添付ファイル | 添付ファイルの始まり。ファイルか OLE オブジェクトかを示す |
attAttachTitle | 添付ファイル | ファイル名 |
attAttachData | 添付ファイル | ファイルそのもの |
attAttachment | 添付ファイル | 添付ファイルの MAPI プロパティ(長いファイル名など)。添付されたメールや OLE オブジェクトは attAttachData ではなくここに入る |
書式付きの本文は、attMsgProps の中の MAPI プロパティとして運ばれます。[MS-OXTNEF] の例のメッセージでは PidTagRtfCompressed というプロパティで、RTF を圧縮したものです。圧縮の方式も Microsoft が公開しています([MS-OXRTFCP])。圧縮は大きさを減らすためのもので、中身を隠すものではありません。また、ここが RTF だからといって、メールがリッチ テキストで書かれたとは限りません。別の仕様書([MS-OXRTFEX])に、HTML やテキストのメールを元に戻せる形で RTF に包む方法が書かれています。
バイト単位の作りと、素直に読もうとすると壊れるところは、winmail.dat をブラウザだけで開くために TNEF を実装した話に書きました。
開き方
このサイトの winmail.dat ビューアは、ファイルをアップロードせずにブラウザの中で読み取ります。上で説明した中身を、次のように扱います。
- 名前ではなく先頭の 4 バイトで判断するので、ATT00001.dat のような名前でも同じように開けます。
- 件名と差出人を表示します。古い属性と MAPI プロパティの両方があるときは、MAPI プロパティのほうを使います。
- 本文は、テキスト・HTML・圧縮 RTF のうち入っているものから表示します。RTF に包まれた HTML のメールは元の HTML に戻し、リッチ テキストで書かれたメールは書式を除いた文字だけを表示します。RTF が壊れていて読めないときは、そう表示します。
- 普通の添付ファイルを一覧にし、1 つずつ、またはまとめて ZIP で保存できます。
- 添付されたメールや、埋め込みの OLE オブジェクトは変換しません。名前の付いたファイルとして一覧に出ても、そのままでは開けないことがあります。
Windows・Mac・iPhone・Android・Gmail それぞれの手順はwinmail.dat を開くには?に、iPhone の「メール」に届いた場合はiPhoneでWinmail.datが届いた時の対処法にまとめています。そもそも TNEF なのか分からないファイルは、これ何のファイル?で先頭のバイトから判定できます。
止めるには
受け取った人に Winmail.dat が付く問題について、Microsoft が挙げる解決策は、どれも送る側で TNEF を使わないようにすることです(すべてのメールで、またはそのメールだけ)。実際には、送り主に HTML 形式で送ってもらうか、組織の設定が原因なら送り主の会社の管理者に見直してもらうことになります。ビューアの結果の下には、送り主に HTML 形式で送ってもらうよう頼む文面があり、コピーするか、メールアプリで開いて送れます。
送る側の方は、確かめる設定を順番にwinmail.dat を送らないようにする Outlook の設定にまとめています。上に書いた .pst ファイルのパスとサインイン名のことも、止めておく理由の 1 つです。
出典は Microsoft の「メッセージ形式が電子メール メッセージに与える影響」「TNEF 変換オプション」(Exchange Server)と、公開仕様書 [MS-OXTNEF]・[MS-OXRTFCP]・[MS-OXRTFEX](英語)です。
よくある質問
winmail.dat はウイルスですか?
拡張子を .zip や .pdf に変えれば開けますか?
winmail.dat を開いたのに、添付ファイルが入っていませんでした。
送った側でも winmail.dat が見えていますか?
この記事を書いた人
Ren
OpenedFile 開発者
OpenedFile を一人で作って運用しています。きっかけは、届いたメールの winmail.dat がどうやっても開けなかったこと。見つかるオンライン変換サービスはどれも「まずファイルをサーバーにアップロードしてください」というものばかりでした。それなら自分で書こうとTNEF パーサをフルスクラッチで実装し、以来このサイトのツールはすべてブラウザ内で完結しています。
OpenedFile について