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

12

我的应用程序正在检查收件箱服务器文件夹中邮件主题的模式,如果找到某个模式,则应将电子邮件(com.sun.mail.imap.IMAPMessage)移动到另一个文件夹 - 例如称为“test”的文件夹(复制也可以完成任务)。

我在互联网上搜索解决方案,但是没有找到任何有用的信息。

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

谢谢


1
嗯,我想用Java移动它。 - gospodin
我在想这段代码是否可行:List<Message> tempList = new ArrayList<>(); tempList.add(myImapMsg); Message[] tempMessageArray = tempList.toArray(new Message[tempList.size()]); destFolder.copyMessages(tempMessageArray, fromFolder); - gospodin
是的,请使用copyMessages方法。我总是很好奇人们在互联网上搜索这类东西时到底在哪里搜索,但他们的搜索并不涉及实际阅读他们正在使用的API的文档。您能解释一下为什么您认为阅读javadocs没有帮助,或者您如何阅读它们但没有找到copyMessages方法吗?也许有些事情我可以做来改进JavaMail文档,使其对于这样简单的情况更有帮助? - Bill Shannon
3个回答

9

通过复制、追加、添加生成新邮件

使用 copyMessages()addMessages()appendMessage() 等方法移动邮件并删除旧邮件是一个不好的想法,因为这些方法会生成一个新的邮件。新邮件在头部具有不同的 Message-ID。如果您对新邮件进行回复,则接收者无法将响应与其发送的邮件相关联,因为他不知道新的 Message-ID

转换为 IMAPFolder

您必须将文件夹转换为 IMAPFolderIMAPFolder 具有方法 moveMessages(Message[] msgs, Folder targetFolder),可移动邮件而不会篡改头部 Message-ID


1
就此而言,copyMessage() 不会生成新的消息 ID,如果 moveMessages() 失败(它可能会失败),那么 copyMessage() 是最好的备选方案。 - arnt
我在Outlook365遇到了一个问题,它不允许我复制(收件箱=>已删除项目)/然后删除(删除失败但没有错误),但将邮件移动到“已删除项目”中是有效的。因此,如果moveMessages失败,考虑将copyMessage作为备选方案?最好再仔细检查一下。 - Michi

7

假设您已经在使用com.sun.mail.imap.IMAPFolder类?

该类具有addMessages(Message[] msgs)方法。使用它将Message添加到新文件夹中。

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


当我尝试使用copyMessages(Message[] msgs, Folder destinationFolder)时,我在使用雅虎邮件时收到A4 BAD [CLIENTBUG] COPY Bad sequence in the command的错误提示。 - Hooli
根据http://mailman13.u.washington.edu/pipermail/imap-protocol/2013-March/002012.html的说法...这可能只是一个Yahoo的问题。 - Steve

5
        List<Message> tempList = new ArrayList<>();
        tempList.add(myImapMsg);
        Message[] tempMessageArray = tempList.toArray(new Message[tempList.size()]);
        fromFolder.copyMessages(tempMessageArray, destFolder);

你能否添加一些关于这段代码的解释?仅有代码块的答案往往不太有帮助。 - Keith Pinson
2
根据Java文档,应该是fromFolder.copyMessages(tempMessageArray, toFolder); - Steve
4
我在一行中总结:destFolder.copyMessages(new Message[]{myImapMsg}, fromFolder); - Massimiliano D'Amico

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接