← RFC Reference

RFC 2046: MIME パート 2 — メディアタイプ

Standards Track MIME — Multipurpose Internet Mail Extensions Published March 2026
ELI5: [RFC 2045](2045) はメールのエンベロープを定義しました。RFC 2046 はその中に入れられるもののタイプを定義しています:テキスト、画像、音声、ビデオ、アプリケーション — そして重要なことに、複数のものを1 つのエンベロープに入れる方法です。これが 1 つのメールにテキスト本文、HTML 本文、および 3 つの添付ファイルを含めることができる理由です。

これが存在する理由

RFC 2045はContent-Typeとトランスファーエンコーディングを導入しましたが、どのコンテンツタイプが存在するか、またそれらがどのように動作するかは定義されていません。RFC 2046は以下を定義することによってその隙間を埋めています:

これは現代的なメールを可能にするRFCです。これがなければ、すべてのメールは単一のテキストブロックになります。

仕組み

トップレベルメディアタイプ

タイプ 説明 一般的なサブタイプ
text 人間が読めるテキスト text/plaintext/htmltext/calendar
image 画像データ image/pngimage/jpegimage/gifimage/svg+xml
audio オーディオデータ audio/mpegaudio/ogg
video ビデオデータ video/mp4video/webm
application バイナリデータまたは構造化形式 application/pdfapplication/jsonapplication/octet-stream
multipart 1つのメッセージ内の複数のボディパーツ multipart/mixedmultipart/alternativemultipart/related
message カプセル化されたメールメッセージ message/rfc822message/delivery-status

マルチパートメカニズム

マルチパートタイプはRFC 2046の中核です。マルチパートメッセージには各パーツを区切るboundaryパラメータが含まれます:

Content-Type: multipart/mixed; boundary="----=_boundary_001"

------ プリアンブル(MIMEクライアントで無視される) ------

------=_boundary_001
Content-Type: text/plain; charset=utf-8

これが最初のパーツです。

------=_boundary_001
Content-Type: text/plain; charset=utf-8

これが2番目のパーツです。

------=_boundary_001--
^^^ 終了を示す後ろの-- に注意

バウンダリの主要ルール:

マルチパートサブタイプ

サブタイプはメールクライアントにパーツをどのように表示するかを伝えます。ここが微妙な点が存在するところです。

multipart/mixed — 順序付きパーツ

最も一般的なマルチパートタイプです。パーツは順序で表示されます。「メッセージボディ + 添付ファイル」に使用されます:

Content-Type: multipart/mixed; boundary="----=_mixed"

------=_mixed
Content-Type: text/plain; charset=utf-8

ご要望いただいたレポートをお送りします。

------=_mixed
Content-Type: application/pdf; name="report.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="report.pdf"

JVBERi0xLjQKJeLjz9MK...

------=_mixed--

multipart/alternative — 同じコンテンツ、異なる形式

同じコンテンツの複数バージョンが含まれます。メールクライアントは表示できる最適なものを選択します。パーツは単純から豊か順に並べられます — 最後のパーツが優先されます

Content-Type: multipart/alternative; boundary="----=_alt"

------=_alt
Content-Type: text/plain; charset=utf-8

我々のサービスへようこそ!

------=_alt
Content-Type: text/html; charset=utf-8

<h1>我々のサービスへようこそ!</h1>
<p>お力になれて光栄です。</p>

------=_alt--

これがすべてのよく形成されたHTMLメールの仕組みです:text/plainフォールバックが最初に来て、text/htmlバージョンが最後に来ます。HTMLをサポートするクライアントはHTMLを表示します。プレーンテキストクライアントはテキストを表示します。

multipart/related — リンクされたパーツ

パーツが相互参照する場合に使用されます。最も一般的なユースケースはインライン画像を含むHTMLメールです。HTMLはContent-ID(cid: URL)で画像を参照します:

Content-Type: multipart/related; boundary="----=_rel"

------=_rel
Content-Type: text/html; charset=utf-8

<p>ロゴをご確認ください:</p>
<img src="cid:logo@example.com" alt="ロゴ" />

------=_rel
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-ID: <logo@example.com>

iVBORw0KGgoAAAANSUhEU...

------=_rel--

multipart/digest — メッセージの集合

各パーツのデフォルトコンテンツタイプがtext/plainの代わりにmessage/rfc822となるmixedの変種です。メーリングリストダイジェストで使用されます。現代のメールではめったに見られません。

主要な技術的詳細

マルチパートタイプのネスト

MIMEの真の力はネストから来ます。インライン画像と添付ファイルを含む典型的なマーケティングメールは以下のようになります:

; HTMLメールとインライン画像+添付ファイルの標準的な構造

Content-Type: multipart/mixed           ← 外部:ボディ+添付ファイル
  |
  |-- multipart/alternative              ← ボディ:テキストまたはHTML
  |     |-- text/plain                    ← プレーンテキストフォールバック
  |     |-- multipart/related             ← HTML+インライン画像
  |           |-- text/html               ← HTMLボディ
  |           |-- image/png (cid:logo)    ← インライン画像
  |
  |-- application/pdf (attachment)       ← ファイル添付

この3段階のネストは事実上すべてのメールライブラリとメールサービスプロバイダーで使用される標準パターンです。

message/rfc822タイプ

メール全体をボディパーツとしてカプセル化します。メッセージを添付として転送する場合とバウンス通知(RFC 3462 multipart/report)で使用されます。カプセル化されたメッセージは独自のヘッダ(From、To、Subject等)とボディを持ちます。

application/octet-streamフォールバック

ファイルのコンテンツタイプが不明な場合、application/octet-streamを使用してください。これはクライアントに汎用バイナリデータとして扱うよう伝え、通常ダウンロードプロンプトをトリガーします。これはMIMEの「これが何であるかわかりません。保存して自分で解決してください」と同等です。

バウンダリ要件

バウンダリ文字列には特定のルールがあります:

一般的な間違い

配信性への影響

Related RFCs