Ich habe das folgende Codefragment:
// 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);
Gelegentlich erhalte ich die folgende Ausnahme:
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 [***]
Ich bin mir nicht sicher, ob dies darauf zurückzuführen ist, dass ich die JavaMail-API falsch verwende, oder ob es sich um ein Serverproblem handelt. Ich habe zwei Beobachtungen:
-
Der Fehler tritt auf, wenn das Vorhandensein des Ordners geprüft wird, und nicht, wenn getFolder aufgerufen wird.
-
getFolder wird mehr als einmal im Code aufgerufen.
Ich nehme an, dass es möglich ist, dass die Verbindung zum Mailserver irgendwann nach dem Aufruf von folder.getMessages() abbricht, aber es schlägt IMMER beim exist()-Aufruf fehl, im Gegensatz zum create()-Aufruf.
Eine Lösung besteht darin, store.isConnected() zuerst aufzurufen und die Verbindung bei Bedarf wiederherzustellen, aber ich möchte erst herausfinden, ob ich etwas falsch mache, bevor ich darauf zurückgreife.
Ich wäre dankbar für jede Einsicht oder jeden Ratschlag, wie ich die Ursache dieser Ausnahme näher ergründen kann. Vielen Dank im Voraus!