IMAPプロトコルでメッセージを処理するためにメールサーバーに接続するJavaMail APIを使用してメールクライアントを実装しました。 implemenetationは、多くの顧客とのメールサーバに正常に動作しますが、我々は問題がある顧客は、IMAP :(JavaMail)UIDVALIDTYの値は常に一部のフォルダの変更
はUIDVALIDTY:は、我々はフォルダ内のメッセージのUID値に頼ることができるかどうかを決定するために、我々は、各フォルダの最近のUIDVALIDTYを格納します。そして、次のプロセスでは、最近格納された値と現在の値を比較します。それらが同じであれば、私たちはUIDに頼ることができます。 IMAP仕様では、この値を不必要に変更しないようにサーバーが最善を尽くすことを要求しています。 (メールサーバーのクラッシュ、再起動、アップグレードなどを除く)
この特定の顧客のメールサーバーでは、毎回一部のフォルダのUIDVALIDTY値が変更されます。テストアカウントには300個のフォルダがあり、そのうち15個は常に同じ特定の定義済みフォルダであり、常に異なるUIDVALIDTY値を持ちます。
その理由は何でしょうか?メールサーバーの設定はありますか?私はそれがJavaメールのAPIの範囲を超えていると思う、それはメールサーバーに関連しています。お客様は、メールサーバーに問題はないと言い、Webインターフェイスで使用できます。メールサーバーに問題があると顧客を説得して納得させるにはどうすればよいですか?
私たちは、JavaメールAPIを使用してUIDNOTSTICKYを検出できますか? – benchpresser
そうです。私はわかりませんが、[あなたが聞くことができる] StoreEventを取得する可能性が高いです(http://docs.oracle.com/javaee/6/api/javax/mail/Store.html#addStoreListener(javax .mail.event.StoreListener))。人間が読めるテキストがないためにこのメッセージが表示されない場合は、IMAPStoreをサブクラス化し、 'handleResponseCode()'を再実装し、UIDNOTSTICKYをチェックし、 'super.handleResponseCode()'を呼び出すことができます。しかし、StoreEventのリスニングはより良いです。 – arnt
[JavaMailデバッグ出力](http://www.oracle.com/technetwork/java/javamail/faq/index.html#debug)を有効にして、そのレスポンスコードを取得しているかどうかを確認することができますが、あなたが違う何かをすることができるのは明らかではありません。メールボックスが表示されるたびに異なっていると仮定するか、またはキャッシュされた情報がまだ有効かどうかを判断するために独自のヒューリスティックを作成する必要があります。私は、これらのメールボックスが実際に削除されず、あなたがそれらを見るたびに再作成されていないと思いますよね?お客様はどのようなメールサーバーを使用していますか? –