【问题标题】:How to properly delete a copied gmail message using javamail?如何使用 javamail 正确删除复制的 gmail 邮件?
【发布时间】:2016-11-29 21:42:21
【问题描述】:

我有这样的场景。我已将一封 gmail 邮件从收件箱复制到收件箱的子文件夹,例如测试文件夹。现在消息在收件箱和收件箱/测试文件夹中。现在,如果我想使用 javamail 删除(删除)收件箱/测试文件夹中的副本,它也会从收件箱中删除。

我知道 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);

上面的代码只删除收件箱/测试文件夹中的邮件,而不是雅虎收件箱和所有的邮件。但对于 gmail,它会从收件箱以及收件箱/测试文件夹中删除邮件。

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

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

【问题讨论】:

    标签: java gmail jakarta-mail imap


    【解决方案1】:

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

    【讨论】:

    • 对不起我的坏比尔。它确实有效。我还有其他错误。谢谢。
    猜你喜欢
    • 2017-02-02
    • 2023-03-04
    • 2014-09-13
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 2011-03-14
    • 2017-05-14
    • 1970-01-01
    相关资源
    最近更新 更多