メールのソースを表示する手順
- メールクライアントからメッセージの生データを取得して(下の表を参照)貼り付けるか、
.emlや.mhtファイルをページにドロップします。 - 概要には、デコードした From、To、Cc、Subject、Date、Message-ID が表示されます。すべてのヘッダー には、全ヘッダーがデコードした値と生の値とともに並びます。
- 本文 をプレーンテキストか HTML で読みます。HTML はサンドボックス内で表示します。
- 添付ファイル には各ファイルの名前、種類、サイズ、コンテンツ ID が並び、ダウンロード ボタンと、画像ならプレビューが付きます。
- MIME 構造 にはパートの入れ子の様子が表示され、添付ファイルが見当たらないときの手がかりになります。
| メールクライアント | ソースの場所 |
|---|---|
| Gmail | メッセージのメニュー(⋮)→「メッセージのソースを表示」、その後「元のメッセージをダウンロード」 |
| Outlook on the web | メッセージのメニュー(…)→「表示」→「メッセージのソースを表示」 |
| Thunderbird | 「表示」→「メッセージのソース」(Ctrl+U)、または「ファイル」→「名前を付けて保存」で .eml |
| Apple Mail | 「表示」→「メッセージ」→「ソース」 |
デコーダーが扱えるもの
- エンコードされたヘッダー:Base64(
B)と quoted-printable(Q)の RFC 2047 のワード。隣り合うワードは結合し、ブラウザが知っているあらゆる文字コードに対応します。生の UTF-8 のヘッダーも扱えます。 - 添付ファイル名:
filename*=UTF-8''Rechnung%20M%C3%A4rz.pdfのような RFC 2231 の形式や、filename*0*=に分割された続き。 - 本文:
base64とquoted-printableの本文を、宣言された文字コードでデコードします。f=C3=BCrはfürになります。 - 入れ子のメッセージ:
message/rfc822として添付された転送メールも、外側のメールと同じようにたどります。 - インライン画像:HTML 内の
cid:参照を、添付された画像に対応付けます。 - 部分的な入力:単独の Base64 MIME パート、全体が Base64 エンコードされたメッセージ、ヘッダーなしで
--boundaryから始まるマルチパートの本文。
全体が Base64 エンコードされたメッセージは、たいてい UmV0dXJuLVBhdGg6(Return-Path:)か UmVjZWl2ZWQ6(Received:)で始まります。そのまま貼り付けてください。デコーダーがまず外側を外します。
怪しいメッセージを確認する
フィッシングの試みについては、本文よりヘッダーのほうが多くを語ります。すべてのヘッダー で比べるべき点は次のとおりです。
- From と Return-Path、Reply-To。返信先が別のドメインなら典型的な兆候です。
- 受信側のサーバーが追加する Authentication-Results。
spf=、dkim=、dmarc=に pass か fail が付いています。 - Received の行は、下から上へ読むと送信元サーバーから自分のサーバーまでの経路がわかります。
- 添付ファイルの種類:知らない送信者からの
.html、.iso、.zipの添付ファイルは疑ってかかるべきで、invoice.pdf.htmlのような二重拡張子も同様です。
リモートのコンテンツはブロックされるので、ここで HTML 本文を表示してもトラッキングピクセルは読み込まれず、アドレスが読まれたことを知らせることもありません。ページの CSS も取り除くため、ニュースレターはメールクライアントより地味に見えます。
Python で添付ファイルを取り出す
from email import policy
from email.parser import BytesParser
with open("message.eml", "rb") as f:
msg = BytesParser(policy=policy.default).parse(f)
print(msg["Subject"])
for part in msg.iter_attachments():
name = part.get_filename()
with open(name, "wb") as out:
out.write(part.get_payload(decode=True))
print("saved", name)
policy.default はエンコードワードのヘッダーをデコードするので、msg["Subject"] は最初から読める状態です。実際に使うときは、name は送信者から来たものなので、書き込む前にサニタイズしてください。添付ファイルのエンコード方法については メールの Base64 で詳しく説明しています。76 桁の形式は MIME Base64 エンコーダー で作れます。
既知の制限
- Outlook の
.msgファイルには対応していません。winmail.dat(TNEF)のパートは添付ファイルとして一覧に出ますが、展開はしません。 - HTML 本文内のリンクは、設計上何も動作しません。
- MIME パートの数が極端に多いメッセージは、通知を表示して途中で打ち切ります。
よくある質問
Outlook なしで .eml ファイルを開くには?
このページにドロップしてください。ヘッダー、テキストと HTML の本文、すべての添付ファイルが表示され、添付ファイルは 1 つずつダウンロードできます。64 MB までのファイルはブラウザで直接読み込めます。
件名の =?UTF-8?B?…?= とは何ですか?
RFC 2047 のエンコードワードです。B はその間のテキストが Base64 であること、Q は quoted-printable の一種であることを示します。=?UTF-8?B?UmVjaG51bmcgTcOkcno=?= は Rechnung März にデコードされます。デコーダーは、デコードした値と生の値を並べて表示します。
怪しいメールをここで表示しても安全ですか?
HTML 本文はスクリプト、フォーム、機能するリンクのないサンドボックスのフレームで描画し、リモート画像とトラッキングピクセルもブロックするので、開いても送信者には何も伝わりません。添付ファイルは一覧表示してダウンロードできるようにするだけで、開くことはありません。
Outlook の .msg ファイルは開けますか?
開けません。.msg ファイルは MIME ではなく Outlook 独自のバイナリ形式です。同じメッセージを Outlook on the web で開き、メッセージのソースを表示して、そのテキストをここに貼り付けてください。