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

How to properly delete a copied gmail message using javamail?

我有这样一个场景。我已将 Gmail 邮件从收件箱复制到收件箱的子文件夹,比如测试文件夹。现在邮件在收件箱和 Inbox/test-folder 中。现在,如果我想使用 javamail 删除(删除)Inbox/test-folder 中的副本,它也会从收件箱中删除。

我知道 gmail 在其数据库中只保留一份邮件副本,它只是在邮件中标记文件夹名称,所以很明显,如果我从其他文件夹中删除它,它也会从原始文件夹中删除.

以下代码适用于其他基于 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 中的邮件,而不是从 Yahoo 和所有收件箱中删除邮件。但对于 gmail,它会从收件箱以及 Inbox/test-folder.

中删除邮件

像进化一样的电子邮件客户端,可以为 gmail 正确处理这种情况。它仅从目标文件夹中删除邮件。那么如何使用 javamail 或 gimap 库来实现呢?

注意:我使用的是 1.5.5 的 javamail 库。

看起来应该可行,但 Gmail 并未完全遵循 imap 规范。 debug output 显示什么?