使用javamail将消息从文件夹压缩到另一个消息时,有时会抛出异常

时间:2014-01-10 09:05:31

标签: javamail

尝试将邮件列表从一个文件夹复制到另一个文件夹时,有时会出现此异常。

 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) ...

我的代码:

 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():
  }   

编辑:

删除

之前
   source.expunge();

抛出的异常是:

   messageRemovedException. 

调试器没有任何内容比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.

我想说的是,在我从代码中删除了source.expunge()后,不再抛出任何异常,但实际上失败仍然存在,一些消息被复制到目标并设置为已删除源,并将其中的一小部分复制到目标但在那里设置删除,而不是在源中删除。

1 个答案:

答案 0 :(得分:1)

您正在复制的某些邮件可能已被您的应用程序或访问同一文件夹的其他应用程序删除并清除了吗?详细的协议跟踪可能会提供更多信息。