プロが教えるわが家の防犯対策術!

こんにちは。
現在、solaris9上でメールサーバを構築しています。このたび、サーバを更改し、メールデータをコピーして、Qmail環境からpostfix+tpop3d+DRAC環境に変更しました。
しかし更改と同時に、クライアントがメールを受信しようとしたら、既読のメールを何百通も再受信してしまったという現象が起こりました。
私の認識では、メールの既読、未読を管理しているのは、クライアントのメーラなので、popサーバを更改しても、メールの再受信はないものと考えていたのですが、認識が誤っているのでしょうか?
POPサーバにおける未読、既読の管理について、ご教授いただければと思います。

A 回答 (6件)

はじめまして。



未読、既読の管理については、質問文のとおり、クライアント側で行われています。ですが、そのためにサーバが発行するメッセージのIDを利用しています。
このIDは、セッション後も同じIDとなることが保証されており、クライアントは、どのIDのメッセージが既読であるか覚えているのです。

サーバを変更したことにより、サーバが発行するメッセージIDが変わってしまったために、今回の現象が発生したと思われます。

# ちなみに、ネットワークの仕様についてはRFCを参照するのが良いと思われます。POP3はRFC1939で規定されており、これはRFCの中では読みやすいものとしてよく紹介されます。時間のあるときにでも眺めてみてはいかがでしょうか。
    • good
    • 0

No.3です。


すみません、ウソ言ってましたね。まだまだ修行がたりない。
    • good
    • 0

#4の方が回答の一歩手前まで書いているのですが、


>メールクライアントは、メッセージの特定にはUIDLコマンドの出力値を使います。

UIDLコマンドをサポートするPOPサーバーは現在では100%と言っていいと思いますが、POPサーバープログラムの種類や設定によってIDの形式が異なります。したがって、POPサーバープログラムを変更したら全部未読になります。
    • good
    • 0

haruyutaka さんへ



> % telnet メールサーバ名 110
> user ユーザ名
> pass パスワード
> list
>
> ってやるとわかりますよ。

LIST コマンドの出力はメッセージの番号とオクテット数(サイズ)です。
この番号は、セッション間で同じになることが保証されていないため、メッセージの特定に使えません。
例:
LIST
+OK
1 100
2 200
3 300

DELE 2  # 2番のメッセージを削除
+OK

LIST
+OK
1 100
3 300

(ログアウト後、再度ログインする)
LIST
+OK
1 100
2 300  # 旧3番のメッセージは2番になっている。


そのような理由から、メールクライアントは、メッセージの特定にはUIDLコマンドの出力値を使います。UIDLコマンドは規定上はオプションなので、サーバによってはサポートしていないこともありえますが、現在は一般化しており、ほとんどのサーバ・クライアントで利用しています。

以上、少し気になりましたので投稿させていただきます。

参考URL:http://www.ietf.org/rfc/rfc1939.txt
    • good
    • 0

popコマンドの中でLISTを出すと



1 XXXXX
2 XXXXX
3 XXXXX

という様に、メールの番号とそれのメッセージの
番号が返されます。XXXXXというのは、メールサーバ
が独自に作成するものみたいです。。たしか、、

クライアントは、このリストを記憶しておいて、
ダウンロードしたか・していないか判断しています。

なので、popサーバがことなると上のXXXXXって値が
異なる値を返します。なので、クライアントはダウンロードしてしまいます。

% telnet メールサーバ名 110
user ユーザ名
pass パスワード
list

ってやるとわかりますよ。
    • good
    • 0

メールの一覧の中から何をダウンロードしたのかを覚えているのはクライアント側ですがメール一覧を提供するのはサーバー側です


サーバーを変えたことでメール一覧データが変わってしまい(順番とか容量とか・・)未読と判断されたのではないかと推測
telnetでメールサーバーに接続してみて何が変わったのか確認しては如何でしょうか?

参照URL:
http://www.olug.gr.jp/index.php?%5B%5BTelnet%A4% …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!