Я читаю электронные письма с emailServer и сохраняю их в базе данных. Я использую следующий код для чтения сообщений из папки ( "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);
Я провел некоторое исследование и обнаружил, что messagecache установлен для папки, как только он открывается, предположим, что он установлен как 520 (размер папки). Если какое-либо сообщение поступит после того, как установлен кеш сообщений, то в последней последовательности сообщений число превышает общий размер кеша сообщений и генерирует исключение.
Может ли кто-нибудь сообщить мне, как получить абсолютное значение UId последнего сообщения в папке или как получить блокировку папки, чтобы после установки кеша папка не обновляла размер папки.