当索引存在时,javax.mail抛出IndexOutOfBoundsException

时间:2016-12-19 23:49:41

标签: scala javamail

包使用:

com.sun.mail:来自maven的javax.mail:1.5.6

我写了一个scala程序,我使用import binascii import os from django.db import models from django.utils.translation import ugettext_lazy as _ from my_project.companies.models import Company class MyOwnToken(models.Model): """ The default authorization token model. """ key = models.CharField(_("Key"), max_length=40, primary_key=True) company = models.OneToOneField( Company, related_name='auth_token', on_delete=models.CASCADE, verbose_name="Company" ) created = models.DateTimeField(_("Created"), auto_now_add=True) class Meta: verbose_name = _("Token") verbose_name_plural = _("Tokens") def save(self, *args, **kwargs): if not self.key: self.key = self.generate_key() return super(MyOwnToken, self).save(*args, **kwargs) def generate_key(self): return binascii.hexlify(os.urandom(20)).decode() def __str__(self): return self.key 来处理电子邮件。在第一部分中,我通过javax.mail获得了一些邮件ID,之后当我尝试通过这些ID 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) 给了我一个暗示,可能存在一些服务器端限制,这是真的吗?

2 个答案:

答案 0 :(得分:0)

我认为这些数字表示您传递的ID为416,而集合的计数为64.似乎getMessage(id)可能正在尝试查找数字以从数组中检索该消息;例如getMessage(0)将是集合中的第一个。相反,似乎代码传递的消息ID不能直接转换为集合中的数字。

答案 1 :(得分:0)

看起来你在获取Message对象后关闭了Folder。消息号(和消息对象)仅在文件夹打开时有效。