2016-08-02 105 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都是相對於該文件夾的。 –

相關問題