【问题标题】:javamail and gmailjavamail 和 gmail
【发布时间】:2011-09-21 03:01:51
【问题描述】:
  1. 以下代码抛出 IndexOutOfBoundsException。知道为什么吗?

     Folder folder = store.getDefaultFolder();
     folder = folder.getFolder("INBOX");
    
     int totalMessages = folder.getMessageCount();
     //totalMessages is 17000
    
      folder.getMessages(16900, 16999)   --- here I am trying to get the NEWEST 99                                                                                         messages.
    

即使有这么多邮件,这段代码也会抛出异常 indexoutofbounds。我做错了什么?

  1. folder.getMessages() - 获取从第一封邮件到最后一封的所有邮件。在我的情况下17000!如何获取从最新到最旧的电子邮件? 我只想查看最新的电子邮件——大约 100 封。这可能吗?

【问题讨论】:

  • 我知道了 - 最后一封电子邮件是 folder.getMessageCount() - folder.getDeletedMessageCount();

标签: java gmail jakarta-mail


【解决方案1】:

请先以 read 或 read_write 模式打开文件夹。

folder.open(Folder.READ_WRITE);

【讨论】:

    【解决方案2】:

    永远不要在代码中使用魔法值,它只会让你痛苦。试试:

    int messagesToDisplay = 100;
    folder.getMessages(totalMessages  - messagesToDisplay , totalMessages);
    

    JavaDoc 开始,消息使用基于 1 的数组而非 0 进行标识。

    请您也添加堆栈跟踪。

    【讨论】:

    • 同样的错误。我首先尝试了这个,当我得到错误时,替换了实际值并再次调用了 Api。
    • 并且堆栈跟踪是 java.lang.IndexOutOfBoundsException 在 com.sun.mail.imap.IMAPFolder.checkRange(IMAPFolder.java:361) 在 com.sun.mail.imap.IMAPFolder.getMessage(IMAPFolder .java:1251) 在 javax.mail.Folder.getMessages(Folder.java:866) 在 ashwin.GMailReader.readMail(GMailReader.java:38) 在 ashwin.GMailReader.main(GMailReader.java:56)
    • 使用folder.getMessage(1) 获取一条消息是否有效?
    • folder.getMessage(messageNumber) 适用于较小的数字。看起来总计数也检索了已删除和归档邮件的计数。
    猜你喜欢
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多