用語辞典・メール

Message-ID

Message-IDとは

Message-IDは、メールを識別するため送信側が付ける、原則として一意になるよう構成されたヘッダー値です。一般に「メッセージ・アイディー」と読み、RFC 5322のMessage-ID header field(メッセージ識別子フィールド)に一つのmsg-idを置きます。

同じメッセージが複数のメールサーバーや受信者へ配送されても、通常は同じMessage-IDを保ちます。検索、返信の関連付け、重複候補の発見、ログ照合に使えます。

Message-IDは識別のためのラベルで、秘密値でも電子署名でもありません。同じ値があることだけで、送信者本人・内容一致・安全性を保証しません。

作成時に一つの識別トークンを生成し、中継中は保ち、受信側で返信のまとまりと重複候補へ利用する別メッセージには別の値を生成し、中央の採番機関には依存しない
メール作成画面で指紋状の固有トークンが作られ、複数の中継サーバーを通っても維持され、受信側で返信スレッドと重複候補の整理に使われるMessage-IDのピクトグラム図解
図1図の指紋は「同じメッセージを対応させるラベル」の比喩です。本人の生体情報や暗号学的な真正性を示すものではありません。

一つの識別子を、五つの用途で使い分ける

同じ値を手掛かりにしても、各機能が保証する範囲は異なる検索結果が一致しても、本文と差出人を別に検証する
  1. Identify
    メッセージを指し示す

    作成側の名前空間で、他のメッセージと衝突しにくい値を生成する

  2. Thread
    返信関係を組み立てる

    In-Reply-ToとReferencesが親・祖先のMessage-IDを参照する

  3. Search
    サーバー間ログを照合する

    時刻、宛先、待ち行列IDと組み合わせ、同じ配送事象の候補を探す

  4. Duplicate
    重複候補を見つける

    同じIDの複数受信を手掛かりにするが、本文一致を自動保証しない

  5. Archive
    参照を長期保存する

    URL化や索引キーに使う場合は個人情報露出と衝突時の扱いを決める

図2配送キュー固有の待ち行列IDやDSNのENVIDは別の識別子です。Message-ID一つへすべての配送状態を押し込みません。

構文は山括弧内のid-left@id-rightである

msg-idは山括弧の中にid-left@id-rightを置く構造です。メールアドレスに似ますが、メールボックスへの配送先ではありません。id-rightには生成側が管理するドメインなどを使い、id-leftと組み合わせて一意性の範囲を作ります。

表示時に山括弧を省いたり折り返したりする製品があります。調査では生ヘッダーからフィールド全体を取り、余分な空白・改行を正しく解析します。

中央発行機関ではなく、生成側が衝突を避ける

世界共通のMessage-ID台帳はありません。生成側は時刻、高品質な乱数、プロセス固有値、管理ドメインなどを組み合わせ、同じ名前空間で二度作らないようにします。

時刻だけ、連番だけ、短い乱数だけでは、複数機器・再起動・並行処理で衝突し得ます。ドメインを持たない端末でも十分な乱数などで一意性を確保し、固定値や空値を使い回しません。

誰が生成するかは、投稿経路で変わる

通常はメール作成アプリがMessage-IDを付けます。付いていない、構文が不正、ローカルポリシーに合わない場合、投稿サーバーが生成・修正することがあります。

再送を示すResent-*フィールドにはResent-Message-IDを使えます。転送やメーリングリストが元Message-IDを保つ場合も、新しい投稿として別IDを生成する場合もあるため、処理方式を確認します。

返信スレッドはReferencesとIn-Reply-Toで作る

返信メールは親メッセージのMessage-IDをIn-Reply-Toへ置き、祖先の列をReferencesへ引き継ぎます。メールアプリはこれらを使って会話の木を作ります。

件名の一致だけでまとめる実装もあり、ヘッダー欠落、改変、長すぎるReferencesの切り詰めで表示は変わります。スレッド表示は便宜的な整理で、同じ参加者や同じ話題を厳密に証明しません。

重複排除には使えるが、同一本文の証明ではない

SMTPの応答が失われると再送され、同じMessage-IDのコピーが届くことがあります。受信側は宛先、時刻、本文ハッシュなどと組み合わせ、重複表示を抑えられます。

攻撃者は他人のMessage-IDをコピーでき、壊れた送信ソフトは同じIDを別本文へ再利用できます。Message-IDだけで一方を削除すると正当なメールを失うため、複数条件で判断します。

電子署名と認証は別のヘッダーが担う

Message-IDには改ざん防止機能がありません。DKIMがMessage-IDを署名対象へ含めれば、その署名の範囲では変更を検出できますが、Message-ID自体の性質が変わるわけではありません。

差出人ドメインはSPF・DKIM・DMARC、配送経路はReceived、返送先はReturn-Pathを確認します。一つのIDを認証結果の代用にしません。

内部名や個人情報を埋め込まない

Message-IDは受信者、転送先、アーカイブ、問い合わせ画面へ長く残ります。内部ホスト名、利用者名、メールアドレス、データベース主キーをそのまま含めると、構成や個人情報が外部へ出ます。

衝突しにくい非推測的な値を生成し、ログではMessage-ID全文を検索キーにしても、外部共有時は同じ置換値へ伏せて対応関係だけ残すことが安全です。

識別子とメール構造の確認資料:RFC 5322「Internet Message Format」RFC 5598「Internet Mail Architecture」

関連用語