2016-08-02 21 views
1

所以我试图找出如何使用的UID使用JavaMail如何进行搜索并获取带有UID的消息数组我可以参考?

IMAPStore store = (IMAPStore) session.getStore("imaps"); 
store.connect(); 
IMAPFolder folder = (IMAPFolder) store.getFolder(FOLDER_NAME); 
folder.open(Folder.READ_ONLY); 

然后我想搜索的文件夹中获取消息:

Message unreadMessages[] = 
    folder.search(new FlagTerm(new Flags(Flags.Flag.SEEN), false)); 

但阵列中的消息没有的UID返回,因此如何我是否稍后将它们取出以供没有ID的处理引用它们?

+0

其值得注意的是,IMAPFolder实现UIDFolder [链接](https://javamail.java.net/nonav/docs/api/com/sun/mail/imap/IMAPFolder.html) – davesbrain

回答

1

我假设你在谈论IMAP UID并且你知道IMAP UID是如何工作的。被删除的答案解释得很好。 Folder.search给你一堆消息对象。使用UIDFolder.getUID方法,您可以遍历每个消息对象并获取其对应的UID。使用Folder.fetch方法,您可以使用单个IMAP命令预取这些UID,以便在每个Message上迭代以获取其UID,并在本地进行。如果保存UID,则可以稍后使用UIDFolder方法取回相应的Message对象。不要忘记检查UIDVALIDITY。

+0

谢谢,我挣扎,因为我不明白为什么Message对象不包含UID – davesbrain

+0

因为只有IMAP消息具有UID。 IMAP UID支持由UIDFolder接口表示。我想我们可能有一个带有getUID方法的UIDMessage接口,但将UIDFolder方法放在单一方法上看起来很简单,因为UID都是相对于该文件夹的。 –

相关问题