如何使用 javamail 和 imap 永久删除邮件

how to remove permanently message with javamail and imap

我使用 imap 从邮件服务器读取消息。我希望当我阅读邮件时,邮件从邮件服务器中删除。 我使用 javaMail 库并将删除标志设置为 true,我看不到来自 Web 面板的消息,但是当我得到消息计数时,消息计数没有改变。 我的邮件服务器是 Zimbra。

int count = inbox.getMessageCount();//for example count=100
inbox[i].setFlag(Flags.Flag.DELETED, true);
count = inbox.getMessageCount();// count=100

您需要在将邮件标记为已删除后将其删除,才能真正将其从文件夹中删除。与此同时,它们只是拿着 \Deleted 标记,大多数 IMAP 客户端会隐藏它们。

调用清除 (JavaDoc) 应该和 inbox.expunge() 一样简单。这将导致您标记为已删除或可能在另一个会话中标记为已删除的任何邮件被删除,并将重新编号所有其他邮件中的现有邮件序列号。

如果您的服务器支持 UIDPLUS 而您需要更多控制,IMAPFolder.expunge() 支持删除特定的已删除邮件列表。

if (inbox.isOpen()) {    
    Message[] messages = inbox.getMessages();
for (int i = 0; i < messages.length; i++) {
    System.out.println( messages[i]);
     messages[i].setFlag(Flags.Flag.DELETED, true);
 }
if (inbox.isOpen()) {
    inbox.expunge();
  }
}

感谢@Max