emailServerから電子メールを読み込んでデータベースに保存しています。次のコードを使用して、フォルダからメッセージを読み取ります(「INBOX」)電子メールサーバー上とそれに対応するメッセージを取得私はjava.lang.ArrayIndexOutOfBoundsException t com.sun.mail.imap.MessageCache.getMessage(MessageCache.java:123)
"java.lang.ArrayIndexOutOfBoundsException: message number (621) out of bounds (620)
at com.sun.mail.imap.MessageCache.getMessage(MessageCache.java:123)
at com.sun.mail.imap.MessageCache.getMessageBySeqnum(MessageCache.java:153)
at com.sun.mail.imap.IMAPFolder.getMessageBySeqNumber(IMAPFolder.java:2795)
at com.sun.mail.imap.IMAPFolder.getMessagesByUID(IMAPFolder.java:1924)"
を取得しています私は、受信トレイが浸水なっているとき、この問題が主に来ている、javax.mail.1.4.4を使用しています。使用
コード:
folder = store.getFolder("INBOX");
folder.open(Folder.READ_WRITE);
// messageUID is uid of last message I saved in DB
Message messages[] = ((UIDFolder) folder).getMessagesByUID(messageUID + 1, UIDFolder.LASTUID);
私はいくつかの研究を行い、messagecacheが、すぐにそれが開くと、フォルダに設定されていることを発見した、それは520(フォルダのサイズ)として設定されていると仮定することができます。一方、メッセージキャッシュが設定された後にメッセージが到着した場合、最後のメッセージシーケンス番号はメッセージキャッシュの合計サイズを超え、例外をスローします。
最後のメッセージのUIdの絶対値を取得する方法や、キャッシュの設定後にフォルダのサイズを更新しないようにフォルダロックを取得する方法を教えてもらえますか?
感謝。このバグは修正されましたか?私はちょうどjavax.mail '1.4.7'(最新の安定版ビルド)を使用していましたので、私は推測していません。 – nicholas79171