繁体   English   中英

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

[英]How to properly delete a copied gmail message using javamail?

我有这样的情况。 我已将gmail邮件从收件箱复制到收件箱的子文件夹,例如test-folder。 现在,该消息位于“收件箱”以及“收件箱/测试文件夹”中。 现在,如果以后我想使用javamail在Inbox / test-folder中删除(删除)副本,那么它也将从Inbox中删除。

我知道gmail在其数据库中仅维护该邮件的1个副本,并且仅将文件夹名称标记为该邮件,因此很明显,如果我将其从其他文件夹中删除,它也会从原始文件夹中删除。

以下代码适用于其他基于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,它会从“收件箱”以及“收件箱/测试文件夹”中删除邮件。

电子邮件客户端(例如Evolution)可以针对gmail正确处理此情况。 它仅从目标文件夹中删除邮件。 那么如何使用javamail或gimap库来实现呢?

注意:我正在使用1.5.5的javamail库。

似乎应该可以,但是Gmail并不完全遵循imap规范。 调试输出显示什么?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM