2016-12-19 2 views
0

пакет с помощью:javax.mail бросает IndexOutOfBoundsException когда индекс действительно существует

com.sun.mail: javax.mail: 1.5.6 от мавена

Я написал программу SCALA, где я использую javax.mail, чтобы иметь дело с электронные письма. В первой части я получаю идентификатор почты по номеру message.getMessageNumber, а позже, когда я попытался получить почту по этим id IndexOutOfBoundsException. Почтовый сервер не изменился во время процесса.

Вот код, в котором я получаю идентификатор сообщений.

val Final = new AndTerm(Subject,Size) 
//val FinalTerm = new AndTerm(From) 
val messages = inbox.search(Final).map{ 
    message=> 
    val date = trim(message.getSubject) 
    (date,message.getMessageNumber) 
}.filter(_._1.isDefined).map(_._2) 
inbox.close(true) 
store.close 

И вот код Исключение выбрано.

//newed another store and Folder with the same name 
val ContentType = messages.map(id=>inbox.getMessage(id).getContentType()) 
inbox.close(true) 
store.close 

Исключение Сообщение:

Exception in thread "main" java.lang.IndexOutOfBoundsException: 416 > 64 
at com.sun.mail.imap.IMAPFolder.checkRange(IMAPFolder.java:513) 
at com.sun.mail.imap.IMAPFolder.getMessage(IMAPFolder.java:1770) 
at EmailReader.MessageByNumber(EmailReader.scala:67) 
at Main$$anonfun$main$1.apply(Main.scala:43) 
at Main$$anonfun$main$1.apply(Main.scala:41) 
at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33) 
at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:186) 
at Main$.main(Main.scala:40) 
at Main.main(Main.scala) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 

416 > 64 дает мне намек, что может быть, есть какой-то на стороне сервера ограничение, это правда?

ответ

0

Похоже, вы закрываете папку после извлечения объектов сообщения. Номера сообщений (и объекты сообщений) действительны только в том случае, если папка открыта.

+0

более подробную информацию о принятии ответа: сервер закрыл мое соединение из-за их правил, чтобы запретить какое-то «странное действие», связался с администратором, решил это – skywalkerytx

0

Я считаю, что числа представляют, что вы передали идентификатор 416, тогда как счетчик коллекции - 64. Похоже, что getMessage (id) может пытаться найти номер для извлечения этого сообщения из массива; такие как getMessage (0), будут первыми в коллекции. Вместо этого появляется код, передающий идентификатор сообщения, который напрямую не переводится на номер в коллекции.

Смежные вопросы