我有一个带有 MessageCountListener
的 IMAPFolder
,用于监听从文件夹中添加/删除的消息。在我的 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/