[英]javax.mail throws IndexOutOfBoundsException when index do exists
包使用:
来自Maven的com.sun.mail:javax.mail:1.5.6
我编写了一个scala程序,其中使用javax.mail
处理电子邮件。 在第一部分中,我通过message.getMessageNumber
获得了一些邮件ID,后来,当我尝试通过这些ID检索邮件时,发生了IndexOutOfBoundsException
。 邮件服务器在此过程中没有任何更改。
这是我得到消息ID的代码。
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
给我一个暗示,也许是服务器端有一些限制,对吗?
我相信这些数字代表您传递的ID为416,而集合的计数为64。看来getMessage(id)可能正在尝试寻找一个数字来从数组中检索该消息。 例如getMessage(0)将是集合中的第一个。 而是代码似乎传递了不能直接转换为集合中数字的消息ID。
似乎您在获取Message对象之后关闭了Folder。 消息号(和消息对象)仅在打开文件夹时有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.