Une exception est parfois lancée lors de la copie des messages du dossier à un autre en utilisant Javamail

StackOverflow https://stackoverflow.com//questions/21040020

  •  21-12-2019
  •  | 
  •  

Question

Lorsque vous essayez de copier une liste de messages d'un dossier à un autre, ces exceptions apparaissent parfois.

 nested exception is :
 com.sun.mail.iap.BadCommandException: A5 BAD COPY failed. Invalid messageset.
 at com.sun.mail.imap.IMAPFolder.copyMesages(IMAPFolder.java.1769)
 Caused by:
 com.sun.mail.iap.BadCommandException: A5 BAD COPY failed. Invalid messageset.
 at com.sun.mail.iap.Protocol.handleResult(Protocol.java:353)
 at com.sun.mail.iap.Protocol.simpleCommand(Protocol.java:373) ...

Mon code:

 public void moveMessageToTrash(String sourceFolder, String destinationFolder,
                         MimeMessage mimeMessage) throws MessagingException
  {
   IMAPFolder source = null;
   IMAPFolder destination = null;
   if(store.isConnected())
    {
     source = (IMAPFolder) store.getFolder(sourceFolder);
     destin= (IMAPFolder) store.getFolder(destinationFolder);
     source.open(Folder.READ_WRITE);
     destin.open(Folder.READ_WRITE);
    }
   Message [] messages = new MimeMessage[1];
   messages[0] = mimeMessage;
   source.copyMessages(messages,destin);
   source.setFlags(messages,new Flags(Flags.Flag.DELETED),true);
   source.expunge():
  }   

EDIT:

Avant de retirer le

   source.expunge();

L'exception lancée était:

   messageRemovedException. 

Et rien n'est dit par le débogueur plus que ce qui est déjà dit sur l'initialisation de la session JavaMail:

When the copy fails, nothing is said by the debugger. Everything is shown is only at the initialization of the session :

   INFO : DEBUG : JavaMail version 1.5.1
   INFO : DEBUG : failed to load any providers, using defaults.
   INFO : DEBUG : Tables of loaded providers.
   INFO : DEBUG : Providers Listed By Class Name :     {com.sun.mail.smtp.SMTPSSLTRANSORT=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTRANSPORT,Oracle,1.5.1]....
   INFO : DEBUG : Providers Listed By Protocol :
   ....
   INFO : DEBUG : failed to load address map, using defaults.

Ce que je veux dire, c'est qu'après avoir supprimé la source.Expunge () du code, aucune exception n'est plus envahie, mais l'échec est toujours disponible, certains messages sont en cours de copie sur la cible et se sont supprimésLa source, et un nombre limité d'entre eux sont copiés sur la cible mais la suppression de la suppression, pas dans la source.

Était-ce utile?

La solution

Peut-être que certains des messages que vous copiez ont été supprimés et expulsés, soit par votre application, soit par une autre application accédant au même dossier?Une trace de protocole détaillée peut fournir plus d'informations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top