用語辞典・メール

MIME

MIMEとは

MIMEは、メールで文字コード、HTML、添付ファイルなど複数形式のデータを扱うための規格です。正式名称はMultipurpose Internet Mail Extensions(マルチパーパス・インターネット・メール・エクステンションズ)で、一般に「マイム」と読みます。

従来のテキスト中心のメッセージ形式へ、内容の種類、文字コード、転送用符号化、複数部分の入れ子を表すヘッダーを追加します。一通のメールを、本文、HTML版、画像、添付ファイルなどの構造化された木として運べます。

MIMEはファイルを別便で送る仕組みではありません。各データを本文部分として一つのメールメッセージ内へ組み立て、SMTPで安全に運べる表現へ変換します。

一通の本文をマルチパートの木へ分け、テキスト、HTML表現、画像、バイナリファイルを種類と符号化付きで収める受信側はヘッダーと境界を解析し、各部分を元のデータへ戻して表示する
一通の封筒から複数の入れ子容器へ分かれ、テキスト文書、HTML風レイアウト、画像、バイナリファイルが別の本文部分と転送用タイルへ変換されるMIMEのピクトグラム図解
図1マルチパートは単なるファイル一覧ではありません。代替や関連など、子部分同士の意味関係も表します。

一つの本文部分を五つの情報で読む

各部分の種類、表現、配置、関連、境界を分けて解析する拡張子や見た目だけで内容を決めず、矛盾時は安全側に扱う
Content-Type内容のメディアタイプ

テキスト、画像、audio、アプリケーション、マルチパートなどとsubtypeを示す

Parameters追加の解釈条件

テキストの文字集合、マルチパートの境界など、種類固有の値を渡す

Transfer-Encoding配送用の表現

Base64やquoted-printableでSMTP経路に適した文字列へ変換する

Disposition表示方法の提案

インラインかattachmentか、保存時の候補ファイル名などを示す

Content-ID部分間の参照

HTML本文から同じメッセージ内の画像などを指し示す識別子になる

Boundary子部分の区切り

本文に現れにくい境界文字列で、マルチパートの開始・終了を示す

図2Content-DispositionはMIME本体を補う仕様です。ファイル名は保存名の提案で、受信側が無条件にファイルシステムへ使う値ではありません。

MIME-VersionはMIME形式を使うことを示す

通常のMIMEメッセージはMIME-Version: 1.0を持ちます。各部分にはContent-Type、必要に応じてContent-Transfer-EncodingやContent-Dispositionなどが付きます。

MIME-VersionがなくてもContent-Typeを解釈する実装はありますが、送信側は規格どおり明示します。ヘッダー名の大小文字は区別しませんが、パラメーター値の扱いは仕様ごとに確認します。

Content-Typeは拡張子ではなくメディアタイプを示す

Content-Typeは種類/subtype形式で内容を表します。テキスト/平文、テキスト/HTML、画像系、アプリケーション系などがあり、テキストには文字集合パラメーターで文字コードを指定できます。

送信者が誤った種類を付ける、攻撃者が実行可能内容を画像に見せることがあります。受信側は宣言、ファイル名、内容検査、利用者操作を合わせ、危険な内容を自動実行しません。

マルチパートは境界で子部分を区切る

Content-Typeがマルチパートの場合、本文は境界パラメーターで指定した区切り行を使い、複数の子部分を並べます。各子部分は自分のヘッダーと本文を持ち、さらにマルチパートを入れ子にできます。

境界は子本文に偶然現れない値を選び、開始境界と最終境界を正しく閉じます。解析器は長さ、入れ子深度、部分数へ上限を設け、壊れた境界で資源を使い切らないようにします。

混在、代替、関連は子部分の関係を表す

マルチパート/混在は独立した本文や添付の組み合わせ、マルチパート/代替は同じ内容の別表現、マルチパート/関連はHTMLと埋め込み画像のような関連資源をまとめます。

代替では受信側が表示可能で好ましい表現を選びます。HTMLだけを表示してプレーンテキストを捨てる仕様ではありません。内容差が大きいと、利用者ごとに異なる情報が見えるため注意します。

Base64とquoted-printableは暗号化ではない

Base64(ベースろくじゅうよん)はバイナリを限られた文字集合へ変換し、quoted-printable(クォーテッド・プリンタブル)は大部分が読みやすいテキストの一部を符号化します。どちらも元へ戻せる転送用表現です。

秘密保持、改ざん防止、送信者認証は行いません。通信路はTLS、メッセージ署名はDKIMやS/MIMEなど別の仕組みを使います。Base64の長い文字列を安全な内容とみなしません。

ヘッダー内の国際化表現は本文の符号化と別である

Subjectや表示名などヘッダーの非ASCII文字はencoded-wordなど別の規則で表現されます。本文のContent-Transfer-Encodingをヘッダー全体へ適用するわけではありません。

ファイル名パラメーターの国際化や長い値には拡張規則があります。分割片の順序、文字コード、言語、重複値を安全に解析し、パス区切りや制御文字を保存名へ通しません。

HTMLメールと埋め込み画像は外部通信を起こし得る

関連内の画像はメッセージに含まれますが、HTMLが外部URLの画像・フォント・リンクを参照する場合もあります。表示だけで送信者へ開封時刻やIPアドレスを知らせることがあります。

メールアプリは外部資源の自動取得を制限し、スクリプトや危険なURL方式を実行しません。HTMLをWebページと同じ自由度で表示しないよう、隔離とサニタイズが必要です。

安全な解析は、壊れた入力を前提にする

メールは外部から届く非信頼入力です。重複ヘッダー、過大な部分、深い入れ子、不正Base64、矛盾する種類とファイル名、圧縮爆弾、パストラバーサルを想定します。

サイズ・部分数・入れ子深度を制限し、宣言と実内容を検査し、添付を隔離し、利用者操作なしに実行・展開・外部取得しないことが基本です。

MIME構造の確認資料:RFC 2045「MIME Part One」RFC 2046「MIME Part Two」RFC 2047「Message Header Extensions」RFC 2183「Content-Disposition」

関連用語