java - 获取已删除消息的 UID

标签 java jakarta-mail imap

我有一个带有 MessageCountListenerIMAPFolder,用于监听从文件夹中添加/删除的消息。在我的 messageRemoved(MessageCountEvent ...) 中,我需要获取刚刚删除的消息的 UID,以便我可以在本地缓存中反射(reflect)这些更改。

问题是,如果我尝试对已删除的邮件执行 IMAPFolder.getUID(Message ...)

    javax.mail.MessageRemovedException
        at com.sun.mail.imap.IMAPMessage.checkExpunged(IMAPMessage.java:220)
        at com.sun.mail.imap.IMAPFolder.getUID(IMAPFolder.java:1949)
        at (...).IdleWatcher$1.messagesRemoved(IdleWatcher.java:64)
        at javax.mail.event.MessageCountEvent.dispatch(MessageCountEvent.java:152)
        at javax.mail.EventQueue.run(EventQueue.java:134)
        at java.lang.Thread.run(Thread.java:856)

如何确定已删除邮件的 UID?我可以浏览所有缓存的消息并检查哪些消息仍然存在,但是每次删除消息时都需要占用大量资源。

最佳答案

删除后无法获取 UID。删除就是删除。

解决此问题的经典方法是使用 UID 作为缓存键并设计您的程序,以便您可以缓存已删除的消息一段时间而不会产生不良影响。例如,如果您想显示看不见的邮件,请询问服务器现在有什么看不见的,然后向您的缓存询问这些消息。

关于java - 获取已删除消息的 UID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27565495/

相关文章:

imap - 在 Java 中更快地阅读收件箱

java - 读取电子邮件的文本文件转换为 Javamail MimeMessage

python - 为什么我不能在 Python 中登录 imap 服务器两次

java - 访问应用程序的密码

java - arraylist 加载给了我有趣的输出

java - 如何通过没有列表的电子邮件地址获取邮件主机名、协议(protocol)、端口和加密方法?

php - 获取 PHP 的 imap_fetchbody 正确的部分编号/索引正文部分列表

java - try block 与空 finally block

java - 如何在 java 中将 UTF-8 字符串转换为 RTF 字符串?

java - ImapIdleChannelAdapter javax.mail.AuthenticationFailedException : [ALERT] Too many simultaneous connections