質問: 同じメールを再度受信してしまう あるタイミングで既に受信したメールを再度受信してしまうという不都合が発生しています。メールは1日数百通きます。クライアントのメール設定では「サーバー側にメールを残す」という項目のチェックはつけてあり、このチェックは外したくないです。 クライアント側の設定は変更せずに、メールサーバーの設定で回避したいと考えているのですが、そういう問題なのでしょうか? どなたかヘルプお願いします。
回答: >クライアントのメール設定では「サーバー側にメールを残す」という項目のチェックはつけてあり、このチェックは外したくないです。 と言う事であれば、 >クライアント側の設定は変更せずに、メールサーバーの設定で回避 は不可能です。 pop3(受信メール)のサーバーでは、以下の事しか出来ません。 ・溜まっているメールのリスト(「1番」からの通し番号と、メールのサイズのみ)をクライアントに返す ・指定された番号のメールのヘッダーのみクライアントに返す ・指定された番号のメールのヘッダーと本文の一部をクライアントに返す ・指定された番号のメールのヘッダーと本文のすべてをクライアントに返す ・指定された番号のメールをサーバーから削除する で、クライアント(メールソフト)は、メールを受信する時は、普通は 1.サーバーから(「1番」からの通し番号と、メールのサイズのみの)リストを拾う 2.溜まっているメールの全部について、ヘッダーのみ拾う 3.ヘッダー内の「message-id」を見て、過去に受信したメールであれば無視する 4.過去に受信した事の無いメールであれば、ヘッダーと本文を拾う 5.拾ったメールの「message-id」を「過去に受信した事のあるメールのリスト」に付け足す 6.「サーバー側にメールを残す」の設定になっていないなら、読んだメールをサーバーから削除する 7.メーラーを終了する際、削除済みアイテムを空にする設定であれば空にする 8.メーラーを終了する際、上記5の「過去に受信した事のあるメールのリスト」を、ファイルに書き出す と言う作業をします。 メーラーを終了する時、ここで「8.」の作業に失敗したり、メーラーを強制終了したり、パソコンを強制終了したりリセットしたりすると「過去に受信した事のあるメールのリスト」が更新されません。 サーバーにはメールが溜まりっぱなしになっているので「過去に受信した事のあるメールのリスト」のファイルの更新に失敗すると、受信した事のあるメールが受信していない事になるので、同じメールを再受信してしまいます。 簡単に言えば「サーバーは『誰が受信したか』なんて事はいちいち覚えちゃいない。受信したかどうかは受信した方で覚えておけ」って事なんです。 なので「サーバーから受信済みメールを消さない場合」に、クライアント側で受信済みリストファイルの更新に失敗する可能性がある」限り、必ず再受信する危険性があります。 つまり「再受信させない唯一無二の方法は、受信したら即座にサーバーから消す、と言う方法しかない」と言う事です。 ちなみに、うっかり「過去に受信した事のあるメールのリスト」の実体ファイルである「pop3uidl.dbx」を削除してしまうと「全部のメールが未受信」になってしまうので「サーバーに溜まってる大量のメール、すべてのメールを再度受信する」と言う恐ろしい事が起きます。