← RFC Reference

RFC 2049: MIME Part 5 — 適合性基準と例

Standards Track MIME — Multipurpose Internet Mail Extensions Published March 2026
ELI5: RFC 2045–2047はMIMEのルールを定義しています。RFC 2049は試験です:ソフトウェアが「MIME準拠」として認められるために何をしなければならないかを正確に規定し、実装をチェックするための具体的な例を提供しています。MIMEが建築基準法であれば、これが検査チェックリストです。

このドキュメントが存在する理由

MIME仕様は4つの技術RFC(204520462047、および2048)にまたがっています。実装者は「MIMEに準拠するためにソフトウェアが最低限処理する必要があるものは何か?」という明確な答えが必要です。RFC 2049はその答えを提供し、実装者がパーサを検証するために使用できる正規テストメッセージも含みます。

準拠文書がなければ、異なる実装がMIMEの異なるサブセットをサポートし、相互運用性の障害につながります。RFC 2049は最低基準を定めています。あらゆるMIMA対応システムは、少なくともこれらのコンテンツタイプ、エンコーディング、および構造を処理する必要があります。

仕組み

RFC 2049は2つのレベルの準拠を定義し、それぞれ特定の要件があります。

送信エージェント要件

MIME準拠送信エージェント(MUAまたはメールライブラリ)は、次の条件を満たす必要があります。

  1. MIME機能を使用するすべてのメッセージにMIME-Version: 1.0を常に含める
  2. 本文が単純な米国ASCII以外のテキストである場合、Content-Typeヘッダを含める
  3. 有効なContent-Transfer-Encodingを使用する。これにより、メッセージ本文が7ビットSMTPゲートウェイを通じて確実に存続できます(非ASCIIコンテンツの場合はbase64またはquoted-printable)。
  4. ヘッダフィールドを正しくエンコードする。SubjectやFrom表示名などのヘッダに非ASCII文字が現れる場合は、RFC 2047エンコード単語を使用します。
  5. 有効なマルチパートバウンダリを生成する。このバウンダリは、含まれるボディパートには現れてはいけません。

受信エージェント要件

MIME準拠受信エージェントは、次の条件を満たす必要があります。

  1. MIME-Version: 1.0を認識し、メッセージをMIMEエンコードとして扱う
  2. Content-TypeおよびContent-Transfer-Encodingヘッダをすべてのパラメータを含めて解析する
  3. base64およびquoted-printableコンテンツ転送エンコーディングをデコードする
  4. すべてのマルチパートタイプを処理する。最低限multipart/mixedmultipart/alternativemultipart/digestmultipart/parallel。不明なマルチパートサブタイプはmultipart/mixedとして扱われるべきです。
  5. message/rfc822を処理する。カプセル化されたメッセージを表示するか、少なくとも保存オプションを提供します。
  6. 認識されないコンテンツタイプを適切に処理する。ボディパートをファイルとして保存するオプションを提供します。クラッシュしたり無視したりしません。認識されないタイプはapplication/octet-streamとして扱うべきです。
  7. RFC 2047エンコード単語をヘッダフィールドでデコードする
  8. テキストタイプのcharsetパラメータを処理する。最低限US-ASCIIとISO-8859-1をサポートし、理想的にはUTF-8をサポートします。

堅牢性原則

RFC 2049はMIMEに対するPostels法を強化しています。送信時に厳密に、受信時に寛容に。準拠受信者は、わずかに形式が不正なMIMEメッセージであっても表示するため最善を尽くすべきです。完全に拒否する代わりに。

主な技術詳細

正規例

RFC 2049には作業済みMIMEメッセージの例が含まれています。プレーンテキストとHTMLの両方を含む適切なマルチパート/alternative メッセージのパターンはここにあります。

MIME-Version: 1.0
From: sender@example.com
To: recipient@example.com
Subject: MIME conformance test
Content-Type: multipart/alternative; boundary="boundary42"

--boundary42
Content-Type: text/plain; charset=us-ascii

This is the plain text version.

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

<html><body><p>This is the <strong>HTML</strong> version.</p></body></html>

--boundary42--

不明なタイプの処理

重要な準拠要件。受信エージェントが理解できないContent-Typeに遭遇した場合、application/octet-streamとして扱い、保存オプションを提供する必要があります。このルールは将来互換性を保証しています。新しいメディアタイプは既存クライアントを破壊することなく定義できます。

; Unknown type encountered by a client
Content-Type: application/vnd.custom-format
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="data.custom"

; Conformant client treats this as application/octet-stream
; and offers the user a "Save As" dialog

不明なマルチパートサブタイプ

同様に、不明なマルチパートサブタイプはmultipart/mixedとして扱う必要があります。これは、クライアントが各パートを順序付けて表示することを意味します。たとえば、multipart/report(後でRFC 3462で定義)は、これを混合型として扱う古いクライアントでも正しく表示されます。

最小文字セットサポート

準拠実装は最低限以下をサポートする必要があります。

実際には、モダン実装はUTF-8をサポートする必要があります。2024年以降これを行わないことは、技術仕様が義務付けていなくても、精神的には準拠の失敗です。

MIME/非MIME境界

MIME-Version: 1.0ヘッダなしのメッセージは、Content-Typeヘッダが含まれているかどうかに関わらず、プリMIMEプレーンASCIIテキストとして扱われます。MIMEバージョンヘッダはゲートキーパーです。それなしでは、MIME処理は活性化されません。

一般的な間違い

配信可能性への影響

Related RFCs