Pocket

最近、メールがスレッド化される仕組みを知りました。
(こんなことも知らんかった・・・)

キーワードは「Message-Id」「In-Reply-To」「References」というメールヘッダー。

せっかくなので、あなた宛に届いたメールのソースを見てください。

Message-ID ヘッダーが、

Message-ID: <5346AD43.20808@mail.xxxxxxxx.com>

このような感じで付与されていると思います。

また、あなたの見たメールが、誰かからの返信メールだった場合に、そのメールヘッダーに In-Reply-To References もありませんか?

References: <5346AC7D.6030904@mail.xxxxxxxx.com>	<CACFotzJE2LsO3FTXDVGOogECtKiJ3EAuunZweymLvziLjwEjzA@mail.gmail.com>
In-Reply-To: <CACFotzJE2LsO3FTXDVGOogECtKiJ3EAuunZweymLvziLjwEjzA@mail.gmail.com>

さて、このようなメールヘッダーはどのように付与されるのか?順に説明します。

  1. ユーザーAから新規作成でメールを送信する。この段階では、このメールを受信したユーザーBのメールヘッダーには、
     Message-ID: <5346AC7D.6030904@mail.xxxxxxxx.com>
    

    が付与されています。この時点では、 In-Reply-To および References は付与されていません。

  2. 次に、このメールを受信したユーザーBは、これに対して返信する。このメールの返信を受信したユーザーAのヘッダーには、
     Message-ID: <CACFotzJE2LsO3FTXDVGOogECtKiJ3EAuunZweymLvziLjwEjzA@mail.gmail.com>
     References: <5346AC7D.6030904@mail.xxxxxxxx.com>
     In-Reply-To: <5346AC7D.6030904@mail.xxxxxxxx.com>
    

    が付与されています。

    CACFotzJE2LsO3FTXDVGOogECtKiJ3EAuunZweymLvziLjwEjzA@mail.gmail.com というのが、ユーザーBが返信した際に付与された Message-ID ですね。

    このときに、元々の Message-IDIn-Reply-ToReferences に付与されます。

    続きます。

  3. さらに、このメールを受信したユーザーAが、返信しています。そのときのメールヘッダーには、
     Message-ID: <5346AD43.20808@mail.xxxxxxxx.com>
     References: <5346AC7D.6030904@mail.xxxxxxxx.com>	<CACFotzJE2LsO3FTXDVGOogECtKiJ3EAuunZweymLvziLjwEjzA@mail.gmail.com>
     In-Reply-To: <CACFotzJE2LsO3FTXDVGOogECtKiJ3EAuunZweymLvziLjwEjzA@mail.gmail.com>
    

    と付与されました。

    このように、元々のメッセージに返信を繰り返していくことで、直前の Message-IDIn-Reply-To へ書き込まれ、さらに References に付与されていきます。

もうこれでスレッド化するメカニズム?はお分かりですね。

ただ、gmailなんかは、Message-ID が繋がっていても、タイトルが変更されると(Re:~でなく、変更すると)、別スレッドと認識しているようなので、
それ以外にもSubjectも見ているのかも知れません。

(というようにメーラーによってい細かい仕様の違いはあると思います)

根本