我有这样的场景。我已经将收件箱中的gmail邮件复制到了收件箱的子文件夹,比如test-folder。现在消息在Inbox以及Inbox / test-folder中。现在稍后如果我想使用javamail删除(删除)Inbox / test-folder中的副本,它也会从收件箱中删除。
我知道gmail在其数据库中只保留了1个邮件副本,它只是将文件夹名称标记为邮件,因此很明显,如果我从其他文件夹中删除它,它也会从原始文件夹中删除。< / p>
以下代码适用于其他基于IMAP的邮件,例如yahoo等。
Folder inbox = store.getFolder("INBOX");
Folder child = store.getFolder("INBOX/test-folder");
inbox.open(Folder.READ_WRITE);
child.open(Folder.READ_WRITE);
AppendUID[] appendUIDs = inbox.copyUIDMessages(new Message[]{ message }, child);
AppendUID appendUID = appendUIDs[0];
long uid = appendUID.uid;
// EDIT: I have to close and reopen the child folder, otherwise getMessageByUID will return null.
child.close(false);
child.open(Folder.READ_WRITE);
Message copiedMessage = child.getMessageByUID(uid);
if (!copiedMessage.isExpunged() && !copiedMessage.isSet(Flags.Flag.DELETED)) {
copiedMessage.setFlag(Flags.Flag.DELETED, true);
}
inbox.close(true);
child.close(true);
以上代码仅删除Inbox / test-folder中的邮件,而不是来自Inbox for Yahoo和所有邮件。但是对于gmail,它会从Inbox以及Inbox / test-folder中删除该消息。
像进化一样发送电子邮件客户端,正确处理gmail的这种情况。它仅从目标文件夹中删除邮件。那么如何使用javamail或gimap库来实现呢?
注意:我使用的是1.5.5的javamail库。