将IMAPMessage移动(复制)到邮件服务器上的另一个文件夹

gos*_*din 5 java email imap jakarta-mail javax.mail

我的应用程序正在检查收件箱服务器文件夹中邮件主题的模式,如果找到某个模式,我们应该将电子邮件(com.sun.mail.imap.IMAPMessage)移动到另一个文件夹 - 例如"test" (副本也可以完成这项工作).

我在互联网上搜索了解决方案但我找不到任何有用的东西.

你能告诉我如何将IMAPMessage从收件箱移动/复制到服务器上的另一个文件夹?

谢谢

Ste*_*eve 6

想必你已经在用com.sun.mail.imap.IMAPFolder

那个班有这个方法addMessages(Message[] msgs).用它来添加Message到新文件夹.

或者,正如@gospodin所提到的,有一种copyMessages(Message[] msgs, Folder destinationFolder)方法,它提供了将消息从原始文件夹复制到新文件夹的快捷方式.


小智 6

这是一个坏主意,移动消息的方法一样copyMessages()addMessages()或者appendMessage()和删除旧邮件,因为这些方法生成一个新的消息。新消息Message-ID的标题有所不同。如果您对新消息做出响应,接收者无法将响应与他发送的邮件相关联,因为他不知道新的Message-ID. 您必须将文件夹强制转换为IMAPFolder. IMAPFolder具有在moveMessages(Message[] msgs, Folder targetFolder)不篡改标题的情况下移动消息的方法Message-ID


gos*_*din 5

        List<Message> tempList = new ArrayList<>();
        tempList.add(myImapMsg);
        Message[] tempMessageArray = tempList.toArray(new Message[tempList.size()]);
        fromFolder.copyMessages(tempMessageArray, destFolder);
Run Code Online (Sandbox Code Playgroud)

  • 我在一行中总结: destFolder.copyMessages(new Message[]{myImapMsg}, fromFolder); (4认同)
  • 根据Java文档,它是`fromFolder.copyMessages(tempMessageArray, toFolder);` (2认同)