次のコードを使用して、電子メールサーバーのフォルダー(「INBOX」)からメッセージを読み取り、それらに対応するメッセージを取得していますが、取得しています
"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);
いくつかの調査を行ったところ、フォルダーが開くとすぐにメッセージキャッシュがフォルダーに設定されていることがわかりました。520(フォルダーのサイズ)に設定されていると仮定します。一方、メッセージ キャッシュが設定された後にメッセージが到着すると、最後のメッセージ シーケンスで num がメッセージ キャッシュの合計サイズを超え、例外がスローされます。
フォルダー内の最後のメッセージの UId の絶対値を取得する方法、またはキャッシュが設定された後にフォルダーがフォルダーのサイズを更新しないようにフォルダー ロックを取得する方法を教えてください。