Czytam wiadomości e-mail z serwera poczty elektronicznej i zapisuję je w bazie danych. Używam następującego kodu do czytania wiadomości z folderu („INBOX”) na serwerze poczty elektronicznej i pobierać wiadomości odpowiadające im ale jestem corazjava.lang.ArrayIndexOutOfBoundsException t na 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)"
używam javax.mail.1.4.4 kwestia ta zbliża się głównie wtedy, gdy skrzynka odbiorcza jest coraz zalane.
kod używany:
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);
Zrobiłem rozeznanie i okazało się, że messagecache jest ustawiony dla folderu, jak tylko otwiera, pozwala przypuszczać, że to jest ustawiona jako 520 (wielkości folderu). Natomiast jeśli nadejdzie wiadomość po ustawieniu pamięci podręcznej wiadomości, to w ostatniej sekwencji wiadomości liczba przekracza całkowity rozmiar pamięci podręcznej wiadomości i zgłasza wyjątek.
Czy ktoś może mi powiedzieć, jak uzyskać bezwzględną wartość UId z ostatniej wiadomości w folderze lub jak uzyskać blokadę folderu, tak aby po ustawieniu cache folder nie aktualizuje rozmiar folderu.
Dzięki za tego obejścia. Czy ten błąd został naprawiony? Po prostu wpadłem na to używając javax.mail '1.4.7' (najnowsza stabilna kompilacja), więc nie zgaduję. – nicholas79171