TIM Labs

Gmailでメーリングリストに投稿したはずのメールが受け取れない?

| コメント(0) | トラックバック(1)

大容量で、POPやIMAPも使える、Googleが提供するWebメールシステム、Gmail。 外出先からでも、別段特別なメールアプリケーションが無くても、 ブラウザ一本、スマートフォン一本あればメールを確認できるのは確かに便利だ。

しかし、そのGmailを使っていてひとつ気になるのが、 自分が参加しているメーリングリストに投稿しても、どうやらそのメールが届かないように見えることだ。

一体これはどういうことなのか? 色々調べる中で分かったことをまとめてみよう。

Gmailの公式説明

ひとまず、該当の現象については、Gmailから公式に下記のような説明がある。

http://mail.google.com/support/bin/answer.py?hl=jp&answer=6588

OK。日本語には「余計なお世話」っていう便利な言葉があるんですよ。

というのはさておき、「すべてのメール」を探せばあるというので探してみよう。 Gmailにはメーリングリストに関する便利な検索フィルタがあって、 list:ml-example@example.com なんて検索をすると、 該当メーリングリストのメールを検索してくれる。

で、確かにそれをすれば自分がMLに投稿したメールは見つかる。 しかし、[ml-example:0123] なる件名のメールは見つからないのだ。 あとから「[ml-example:0123]の件で...」なんて参照されることを考えると、 できれば採番後のメールがあって欲しいのだが、ない。これは一体どういうことなのか。 自動でアーカイブしてくれているだけなら、見つかってしかるべきではないか?

どうも、公式説明だけでは説明しきれない何かが裏で行われているようだ。

混乱の原因

Gmailの内部実装がどうなっているのかはもちろん不明なので、 あくまで下記は私自身がGmailの挙動を見ての推測でしかないことはあらかじめ断わっておくが、 どうやらGmailはヘッダの Message-Id を元に同一メールかどうかを判定しているようだ。 そして、問題は、既に同じ Message-Id のメールを所持していると、 後から受け取った同じ Message-Id のメールは破棄されるらしいことだ。

まあ、どういうことなのかはなんとなく想像はできる。要は多分、Message-IdをKeyにしてメールを管理しているのだ。そして重複があれば上書ではなく後から来たものを破棄する。Message-Idのフィールドの意味を考えれば、別段不思議な実装でもないように思う。思うが...

するとどうなるか。自分がMLにメールを投稿すると、自分が送った「送信済みメール」と、 新たにMLから送られてくる [ml-example:0123] には同じ Message-Id が付いている。 このため、Gmailは二つのメールを同じメールだと判断し、後で受け取ったメールを破棄してしまう...。

ユーザーからは、「送信済みメール」の件名には [ml-example:0123] の採番がついていない (いや、つけられない!)ため、確かに中身は同じであっても、別のメールのように見える。

なるほど。混乱の原因は分かった。 「自動でアーカイブされる」なんて言っているが、 実際には、「アーカイブ済みの同メールを既に持っている」なのだ。

対症療法はある。自分が送った「送信済みメール」を一旦削除し、 MLマネージャに「ml-example:0123をくれ」と要求すればいい。 採番された件名のメールをちゃんと受け取れるはずだ。

...これを運用として毎回やるのはちょっとツラい気がするが。

メーリングリストに関する類似の問題

自分からの送信でなくても、類似の問題は発生する。

例えば私は ml-example に参加しているとして、誰かが To: <私>; Cc: ml-example のようにしてメールを送信すると、 私は「直接受け取るもの」、「ml-exampleから受け取るもの」の2通を受け取ることになるハズだが、 前述挙動によりいずれかひとつしか見ることができない。

これが仮に、直接のメールを受け取り、採番された [ml-example:012] が破棄されたとすると、 後で「[ml-example:012]の件で...」と参照されても、私のメールボックスでは欠番していることになる。

オカシイと思い、MLマネージャに「[ml-example:012]をくれ」と要求しても、「送ったよ!」という応答はあるにも関わらず、 肝心の本文を受け取ることができない。理由は、既に同 Message-Id のメールを所持しており、 Gmailはそれを重複と判断して破棄するからだ。

そんな場合は、なんとか list: の検索で欠番を推測するしかなさそうだ...。

逆に、送る際には、複数のMLや、同じ人に複数届くようにCcするのは避けたほうが良いかもしれない。 しかし、記録のために誰かにToしつつもMLにもCcをする人は結構居るように思うのだが、どうだろう?

どうにかならないの?

何か、運用方法も含め、上手いやり方があるのなら是非そうしたいのだが...。

原因が正しければ、ぱっと思いつく案としては、MLマネージャがSubjectに採番結果を記載する際、Message-Id にも採番結果を含めさせるようにしたらいいんじゃないか、とかはあるが、それがルール的にOKなのかとか、別の問題はないのかとか、色々考えなきゃならないことはありそうだ。そもそも、そういう実装になっていたり、そういう設定にできるMLマネージャって、ないんだろうか。

まあ、とにもかくにも、GmailでMLを使っていて「ん?」と思った人は参考にしてほしい。

トラックバック(1)

トラックバックURL: http://labs.timedia.co.jp/mt/mt-tb.cgi/131

大学のメールシステムはquotaの制限がきついので、大学宛に来たメールをGmailに飛ばして、そちらで見ようとしたところ、自分から自分に送ったメールが見ら... 続きを読む

コメントする

このブログ記事について

このページは、1024が2011年2月 3日 17:04に書いたブログ記事です。

ひとつ前のブログ記事は「コマンドライン型ランチャを活用するためのスクリプト(URLとリモートログイン編)」です。

次のブログ記事は「gitで最後に行ったコミットを修正する」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。