⌘K でツールを切替
EMAIL AUTH

EMLメールビューアー

EMLメールファイルの内容を表示・解析します。

local
eml-viewer
§01 このツールについて

概要

.eml ファイルは、メッセージが流通したときの形式そのままで保存されたものです。 ヘッダ、空行、本文。メールクライアントはその大半を隠しますが、メッセージが 実際に何を含んでいたか(クライアントが表示しないヘッダ、文字化けして届いた件名、 おかしく描画されるメッセージの構造)を知る必要が出たときには足りません。

このビューアはヘッダ境界でファイルを分割し、ヘッダの折り返しを結合し、 MIME の encoded-word を宣言された文字セットで復号して、主要な項目と生の本文の 両方を表示します。

使い方

  1. メッセージを .eml として保存するか、生ソースをコピーします。Thunderbird なら メッセージをデスクトップへドラッグ、Apple Mail なら 表示 → メッセージ → 生のソース、Outlook なら 名前を付けて保存 です。
  2. 中身を貼ります。ヘッダ、空行、本文。これが形式のすべてです。
  3. 要約項目を読み、続いて生の本文で構造を確認します。

encoded-word と、件名が壊れて届く理由

ヘッダは仕様上 ASCII のみです。非 ASCII のテキストは encoded-word として運ばれます。 =?文字セット?エンコード?データ?= の形で、エンコードは base64 なら B、 quoted-printable の変種なら Q です。

真ん中の文字セットが重要で、多くのツールが間違えるのはここです。日本語の件名は 今も日常的に ISO-2022-JP で送られます。Unicode より古いエスケープシーケンス方式の エンコードで、いくつかのメールクライアントでは今も既定です。西欧のメールは ISO-8859-1windows-1252 を使い続けています。UTF-8 だと決めつけた復号は それらすべてを文字化けにし、その結果は「復号の間違い」ではなく「壊れたファイル」に 見えます。

このビューアは宣言された文字セットを読んでそれに従って復号するので、 =?ISO-2022-JP?B?…?= は読める日本語になり、=?windows-1252?Q?it=92s?= は 正しい約物のアポストロフィを持つ it's になります。未知の、あるいは綴りを 誤った文字セットは、失敗するのではなく UTF-8 として扱います。

ヘッダの折り返し

長いヘッダは複数行に分割され、継続行は空白で始まります。Received ヘッダや アドレスが 20 個並ぶ To は、ファイル内では何行にもわたり、その折り返しに 意味はありません。転送の規則であって値の一部ではないのです。

解析の前に折り返しは結合するので、折り返された値は 1 つの文字列として読まれます。 生のテキストを自分で読むときに知っておく価値のある点です。ヘッダの値を grep すると、たまたま折り返された箇所を取りこぼします。

本文の表示について

本文はファイル内の見た目のまま表示します。これは意図的です。

実際のメッセージはほとんどが multipart/alternative(同じ内容のプレーンテキスト版と HTML 版)か multipart/mixed(本文と添付)です。各パートは自分の Content-Type・文字セット・Content-Transfer-Encoding を持ち、パートは 最上位ヘッダで宣言された境界文字列で区切られます。

復号した 1 つのパートを「メッセージ本体」として見せると、その構造が隠れます。 そして通常、見に来た理由はその構造です。クライアントがどのパートを描画して いるのか、プレーンテキスト版が HTML 版と一致しているのか、添付が期待した場所に あるのか。だから生の本文は生のままにしています。

その結果、quoted-printable の本文では ==3D として、ソフト改行が行末の = として見え、base64 のパートは base64 のまま見えます。どれかを復号したい 場合は、そのパートをコピーして Base64 デコード または URL エンコード / デコード にかけてください。

クライアントが見せないヘッダ

要約には通常必要な 7 項目を並べます。貼ったテキストには残りが入っており、 その中のいくつかはクライアントが隠している問いに答えます。

  • Return-Path は封筒の送信者、つまりバウンスの宛先です。送信サーバーが 設定するもので、人が目にする From: ヘッダとは異なることが頻繁にあります。 SPF が通過して DMARC が失敗するとき、この不一致が原因です。
  • List-UnsubscribeList-Unsubscribe-Post は、Gmail でワンクリックの 配信停止ボタンを出させるものです。これを持たない大量配信は、迷惑メール判定を 受けやすくなります。
  • Auto-Submitted は機械生成のメールを示します。自動メッセージでこれが無いと、 不在通知の応答やメールループを引き起こします。
  • In-Reply-ToReferences は、クライアントがスレッドを組み立てる 手掛かりです。返信が新しい会話として現れるなら、どちらかが欠けています。
  • Content-Language は、多言語の送信元がどの版を選んだかを説明します。
  • X-* ヘッダ は送信インフラが付けたものです。スパムスコア・キャンペーン ID・ 内部のキュー名などが出てきて、どのシステムが実際に送ったかを特定する最短の 手掛かりになります。

使用例

  • 件名が意味不明の文字列で届く — ここにメッセージを貼ります。件名が読めるなら 送信側は正常で、受信側のクライアントが文字セットを誤って扱っています。
  • 「Outlook では表示が違う」 — 境界の構造を見ます。multipart/alternative の 2 つのパートが食い違っている、で説明がつく報告がほとんどです。
  • ヘッダが見つからない — クライアントは一部だけを選んで表示します。 List-UnsubscribeAuto-SubmittedX-Failed-Recipients などは、何も 表示されていないときでもファイルには入っています。
  • 自分が実際に何を送ったかの確認 — 送信済みフォルダのメッセージを保存して 読み返します。エンコードの意外な挙動は、生の形の方がはるかに見つけやすいです。

注意事項

ヘッダと本文の境界は、形式どおり最初の空行です。空行が 1 つも無いファイルは ヘッダのみとして扱います。ヘッダブロックだけを貼られたときに望ましい挙動です。

ここでは何も検証しません。Date が不正な、Message-ID が無い、本文に一度も 現れない境界を宣言している .eml も、そのまま表示します。「そうあるべきだった もの」ではなく「そのファイルが何を含んでいるか」を見るのが目的だからです。

配送経路・ホップごとの遅延・SPF / DKIM / DMARC の判定は、 メールヘッダ解析 を使ってください。同じヘッダを別の問いで読みます。

FAQ
メッセージはどこかにアップロードされますか?
いいえ。テキストはページ内で分割・解析します。ネットワーク通信は発生しません。保存されたメッセージには受信者アドレス・内部ホスト名・多くの場合は会話全体が含まれるため、この点は重要です。
他のツールでは `=?UTF-8?B?…` と出る件名が、ここでは読めるのはなぜですか?
それは RFC 2047 の encoded-word で、ヘッダに非 ASCII を載せるための MIME のエンコードです。ここではヘッダ自身が宣言した文字セットを使って復号するので、ISO-2022-JP・Shift_JIS・EUC-JP・ISO-8859 系のいずれも文字化けせず読めるテキストになります。
本文が `=3D` や `=C3=A9` ばかりです
それは quoted-printable で、本文はファイル内の見た目のまま表示しています。本文の復号は行いません。実際のメッセージはたいてい multipart(異なるエンコードの本文が複数)で、そのうち 1 つを「メッセージ本体」として黙って見せるのは誤解を招くからです。
添付ファイルはどこですか?
生の本文の中に MIME パートとして見えますが、取り出しはしません。これはメッセージの構造とヘッダを読むためのツールで、展開のためのものではありません。信頼できない .eml から添付を取り出して提供するのは、別のリスクを持つ別のツールです。
要約に出るヘッダはどれですか?
From・To・Cc・Subject・Date・Reply-To・Message-ID です。それ以外は貼ったテキストの中に残ります。配送経路と認証結果は、メールヘッダ解析の方を使ってください。