← RFC Reference

RFC 2045: MIME パート1 — インターネットメッセージボディのフォーマット

Standards Track MIME — Multipurpose Internet Mail Extensions Published March 2026
ELI5: 元々のメールは平文のテキストのみしか送信できませんでした — 電報のように。MIMEは封筒の発明です。写真、文書、HTMLページ、あらゆる言語のテキストをメール内に入れることができます。RFC 2045は封筒そのものを定義しています — 「このメールはUTF-8でエンコードされたHTMLボディを含む」または「base64でエンコードされたPDFが添付されている」と示すヘッダーです。

なぜこれが存在するのか

RFC 5322(およびその前身のRFC 822)は、メールメッセージをプレーンなUS-ASCIIテキストで定義し、最大行長を998文字としていました。1982年には問題ありませんでしたが、現代のメールには対応していません。現代のメールには以下が必要です:

MIME(Multipurpose Internet Mail Extensions)は、元のASCIIのみのインフラとの後方互換性を保ちながら、これらすべてに対応するために5つのRFCを拡張したスイートです。RFC 2045はパート1で、他のすべてを可能にするヘッダーフィールドとエンコーディングメカニズムを定義しています。

動作方法

RFC 2045は、3つの重要なヘッダーフィールドと2つのエンコーディングスキームを導入しています。

MIME-Versionヘッダー

すべてのMIMEメッセージは以下を含む必要があります:

MIME-Version: 1.0

これは、受信メールクライアントにメッセージがMIME規約を使用していることを通知します。このヘッダーがない場合、メッセージはRFC 5322に従ってプレーンなUS-ASCIIテキストとして扱われます。バージョンは1996年以来1.0のままで、変更されたことはありません。

Content-Typeヘッダー

ボディのメディアタイプとサブタイプ、およびオプションのパラメータを宣言します:

Content-Type: type/subtype; parameter=value

例:

; UTF-8のプレーンテキストメール
Content-Type: text/plain; charset=utf-8

; HTMLメール
Content-Type: text/html; charset=utf-8

; PDF添付ファイル
Content-Type: application/pdf; name="invoice.pdf"

; マルチパートメッセージ(テキスト+HTML+添付ファイル)
Content-Type: multipart/mixed; boundary="----=_Part_123"

Content-Typeが存在しない場合、デフォルトはtext/plain; charset=us-asciiです。これはMIME前のメッセージとの後方互換性を保ちます。

Content-Transfer-Encodingヘッダー

SMTPは、行長が998文字以下の7ビットASCIIテキストを運ぶために設計されていました。バイナリデータ(画像、PDF)と8ビットテキスト(UTF-8)は、これらの制約に合わせるようにエンコードする必要があります。RFC 2045は5つの転送エンコーディングを定義しています:

エンコーディング 用途 オーバーヘッド
7bit US-ASCIIテキスト(デフォルト)。エンコーディングは不要です。 なし
8bit 8ビットテキスト(例:UTF-8)。8BITMIME SMTP拡張が必要です。 なし
binary 任意のバイナリデータ。BINARYMIME SMTP拡張が必要です。 なし
quoted-printable ほとんどがASCIIテキストで、一部の非ASCIIキャラクター。 約5~10%
base64 バイナリデータ(画像、ファイル)または非ASCIーテキストが多い。 約33%

Quoted-Printableエンコーディング

ほとんどがASCIIで、たまに非ASCIIキャラクターがあるテキスト向けに設計されています。各非ASCIIバイトは=XXとしてエンコードされます。ここで、XXは16進値です。76文字を超える行は、末尾の=でソフトラップされます。

; オリジナル:「René sent the café menu」
Content-Transfer-Encoding: quoted-printable

Ren=C3=A9 sent the caf=C3=A9 menu

=C3=A9は、é(U+00E9)のUTF-8エンコーディングで、各バイトが16進エンコードされています。

Base64エンコーディング

任意のバイナリデータをASCIIキャラクター(A-Z、a-z、0-9、+、/)にエンコードします。入力の3バイトごとに、4つのASCIIキャラクターになります。行は76文字でラップされます。

Content-Type: image/png; name="logo.png"
Content-Transfer-Encoding: base64

iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34
AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAApgAAAKYB
zN+OGwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBl

重要な技術的詳細

Content-Dispositionヘッダー

RFC 2045自体の一部ではありませんが(RFC 2183から)、Content-Dispositionはこれと密接に関連し、MIMEで広く使用されています:

; インラインで表示(例:埋め込み画像)
Content-Disposition: inline

; ダウンロード可能な添付ファイルとして提供
Content-Disposition: attachment; filename="report.pdf"

完全なMIMEメッセージ

すべてをまとめます。テキストボディとHTMLボディ、および添付ファイルを含むメッセージ:

MIME-Version: 1.0
From: sender@example.com
To: recipient@example.com
Subject: Invoice attached
Content-Type: multipart/mixed; boundary="----=_outer"

------=_outer
Content-Type: multipart/alternative; boundary="----=_inner"

------=_inner
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Please find your invoice attached.

------=_inner
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

<p>Please find your invoice attached.</p>

------=_inner--
------=_outer
Content-Type: application/pdf; name="invoice.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="invoice.pdf"

JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PCAvVHlwZSAv
Q2F0YWxvZyAvUGFnZXMgMiAwIFIgPj4KZW5kb2JqCg==

------=_outer--

構造に注意してください:multipart/mixedはボディと添付ファイルを保持します。ボディ自体はmultipart/alternativeでテキスト版とHTML版があります。マルチパートタイプの詳細については、RFC 2046を参照してください。

Charsetパラメータ

text/*タイプのcharsetパラメータは、文字エンコーディングを宣言します。最新のメールでは、常にutf-8を使用してください:

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

iso-8859-1windows-1252shift_jisなどのレガシーチャーセットはまだ見られますが、新しいメッセージでは使用しないでください。

よくある間違い

配信性への影響

Related RFCs