← RFC Reference

RFC 2047: MIME パート 3 — 非 ASCII テキスト用メッセージヘッダ拡張

Standards Track MIME — Multipurpose Internet Mail Extensions Published March 2026
ELI5: メールのSubjectやFromなどのヘッダーはプレーンASCII(英字と基本的な句読点)に限定されています。RFC 2047は、Subjectラインをアルファベットでなく日本語で書く、送信者名をアラビア語で書く、またはフランス語の名前をアクセント記号付きで書くことを可能にする工夫です。非ASCII文字をメールサーバーがどれでも転送できるASCIIセーフなラッパーにエンコードし、メールクライアントが表示用にそれをデコードします。

これが存在する理由

RFC 2045RFC 2046はメッセージ本文でASCII以外のコンテンツを転送する問題をContent-Transfer-Encodingで解決しました。しかしメールヘッダー(Subject、From表示名、To表示名など)はRFC 5322によって管理され、7ビットUS-ASCIIに制限されています。

これは明らかな問題を生じます。数十億のメールユーザーがASCII以外の文字を必要とする言語で書きます。RFC 2047なしでは、以下を含むメールを送信できません。

RFC 2047はASCIーのみのヘッダー内にASCII以外のテキストを埋め込むコンパクトな方法であるencoded-word構文を定義します。これはMIME対応のメールクライアントで読み取り可能です。

動作原理

Encoded-Word形式

Encoded-wordは以下の構造を持ちます。

=?charset?encoding?encoded-text?=

3つのコンポーネントは以下の通りです。

コンポーネント 目的
charset 元のテキストの文字セット UTF-8ISO-8859-1ISO-2022-JPなど
encoding テキストをASCIIにエンコードする方法 B(base64)またはQ(quoted-printableバリアント)
encoded-text エンコードされた表現 ASCII文字のみ

Bエンコーディング(Base64)

標準base64エンコーディングを使用します。CJKスクリプトなどASCII以外が大部分のテキストに最適です。

; Subject: 日本語の「Meeting confirmation」
Subject: =?UTF-8?B?5Lya6K2w44Gu56K66KqN?=

; From表示名(中国語)
From: =?UTF-8?B?5byg5LiJ?= <zhang@example.com>

Qエンコーディング(Quoted-Printableバリアント)

ヘッダー用に最適化された修正quoted-printableエンコーディング。本文QP同様、ASCII以外のバイトは=XX16進数ペアになります。主な違い:スペースはアンダースコア(_)としてエンコードされます。

; Subject: アクセント付きeを含む「Café menu」
Subject: =?UTF-8?Q?Caf=C3=A9_menu?=

; From表示名:「René Dupont」
From: =?UTF-8?Q?Ren=C3=A9_Dupont?= <rene@example.com>

; Subject: 「Gruße aus Berlin」(ドイツ語の挨拶)
Subject: =?UTF-8?Q?Gru=C3=9Fe_aus_Berlin?=

QエンコーディングはほとんどのテキストがASCIIでわずかなASCII以外の文字のみの場合に人間が読める形式です。Bエンコーディングはほとんどの文字がASCII以外の場合により圧縮されています。

Encoded-Wordが使用可能な位置

Encoded-wordはヘッダー内の特定の位置で使用可能です。

Encoded-wordはquoted-string内、メールアドレスのlocal-partまたはドメイン内、Content-Typeなどの構造化ヘッダーのパラメータ値内では使用できません(その場合はRFC 2231を使用します)。

主要な技術的詳細

長さの制限

各encoded-wordは75文字を超えてはいけません。エンコードされたテキストが長い場合、折り畳み空白(CRLF+スペースまたはタブ)で区切られた複数のencoded-wordに分割する必要があります。

; 2つのencoded-wordに分割された長いSubject
Subject: =?UTF-8?B?5LuK5pel44Gu5Lya6K2w44Gr44Gk44GE44Gm?=
 =?UTF-8?B?44GU5qGI5YaF44GE44Gf44GX44G+44GZ?=

隣接する2つのencoded-wordが線形空白のみで区切られている場合、それらの間の空白はデコード時に無視されます。これにより、長いテキストを複数のencoded-wordにシームレスに分割できます。

文字セットの選択

新しいメッセージには常にUTF-8を使用してください。他の文字セットはレガシー上の理由で存在します。

文字セット 使用例 推奨
UTF-8 すべてのUnicode文字をカバー 常にこれを使用する
ISO-8859-1 西ヨーロッパレガシー 新しいメッセージでは使用しないでください
ISO-2022-JP 日本語レガシーエンコーディング 一部の日本のメールクライアントからまだ見られます
GB2312 簡体字中国語レガシー 新しいメッセージでは使用しないでください

ヘッダー折り畳みとの相互作用

RFC 5322はヘッダーラインを998文字に制限し、78以下に保つことを推奨しています。Encoded-wordは折り畳みと相互作用します。空白境界でencoded-word間で改行できますが、encoded-word内で改行してはいけません。=?...?=ラッパー全体は1行に収まる必要があります。

デコードルール

メールクライアントがencoded-wordに遭遇するとき、以下を行います。

  1. =?charset?encoding?text?=ラッパーから文字セット、エンコーディングタイプ、エンコードされたテキストを抽出します。
  2. base64(B)またはquoted-printable(Q)を使用してテキストをデコードします。
  3. 結果のバイトを宣言された文字セットに従って解釈します。
  4. デコードされたUnicodeテキストをユーザーに表示します。

クライアントが文字セットを認識しない場合、文字化けしたテキストを表示するのではなく、encoded-wordをそのまま表示する必要があります。

エンコードされたヘッダーを含む完全なメッセージ

MIME-Version: 1.0
From: =?UTF-8?Q?Ren=C3=A9_Dupont?= <rene@example.fr>
To: =?UTF-8?B?5bGx55Sw5aSq6YOO?= <yamada@example.jp>
Subject: =?UTF-8?Q?Re:_R=C3=A9union_du_15_mars?=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Bonjour Taro,

Confirmons la r=C3=A9union pour le 15 mars.

注意:ヘッダーはRFC 2047 encoded-word(=?...?=)を使用しますが、本文は通常のquoted-printableエンコーディング(ラッパーなしの=XX)を使用します。これらはメッセージの異なる部分用の異なるメカニズムです。

エンコーディング比較

同じテキスト「München」を両方でエンコードします。

; Qエンコーディング:読める形式で、ほぼASCIIテキストに最適
=?UTF-8?Q?M=C3=BCnchen?=

; Bエンコーディング:コンパクトだが不透明
=?UTF-8?B?TcO8bmNoZW4=?=

一般的な誤り

配信可能性への影響

Related RFCs