我有以下代码片段:

// using classes from javax.mail.*
// Session / Store setup code
// Store implementation class = com.sun.mail.imap.IMAPStore

Folder folder = store.getFolder("INBOX");  // store setup previously
folder.open(Folder.READ_WRITE);
Message[] messages = folder.getMessages();
Folder anotherFolder = store.getFolder("F1");
if ( !anotherFolder.exists()) {                   [***]
  anotherFolder.create(Folder.HOLDS_MESSAGES);
}
folder.copyMessages(messages, anotherFolder);

有时,我会收到以下异常:
javax.mail.StoreClosedException: failed to create new store connection
   at com.sun.mail.imap.IMAPFolder.throwClosedException(IMAPFolder.java:2208)
   at com.sun.mail.imap.IMAPFolder.doCommand(IMAPFolder.java:2335)
   at com.sun.mail.imap.IMAPFolder.exists(IMAPFolder.java:427)
   at [***]

我不确定这是由于我不正确使用JavaMail API还是由于服务器问题。我有两个观察结果:
  • 当检查文件夹的存在而不是调用getFolder时,将发生故障。
  • getFolder在代码中多次调用。

  • 我想可能不时在folder.getMessages()之后的某个时间点断开与邮件服务器的连接,但是相对于create()调用,它总是在exist()调用上失败。

    一种解决方案是先调用store.isConnected()并在需要时重新连接,但是我想弄清楚在诉诸该方法之前是否先做错了什么。

    对于如何深入探究此异常源的任何见解或建议,我将不胜感激。提前致谢!

    最佳答案

    问题是您没有关闭文件夹。使用后,我们必须关闭文件夹。
    需要时再次打开该文件夹。不要多次打开同一文件夹。

    folder.close(false);
    .
    .
    .
    .
    .
    .
    if (!folder.isOpen()) {
        folder.open(Folder.READ_ONLY);
    }
    

    10-07 19:12
    查看更多