如何使用javamail正确删除复制的Gmail邮件?

时间:2016-07-26 09:50:08

标签: java gmail javamail imap

我有这样的场景。我已经将收件箱中的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库。

1 个答案:

答案 0 :(得分:1)

似乎应该可以使用,但Gmail并不完全遵循imap规范。 debug output显示什么?