2016-08-02 37 views
1

Also versuche ich, um herauszufinden, wie Nachrichten mit UIDs erhaltenVerwenden von JavaMail Wie kann ich eine Suche durchführen und ein Nachrichten-Array mit UIDs abrufen, auf die ich verweisen kann?

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

Dann möchte ich den Ordner suchen:

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

Aber die Nachrichten im Array ohne UIDs zurückgegeben, so wie ziehe ich sie später zur Verarbeitung ohne ID heraus, um sie zu referenzieren?

+0

Sein bemerkenswert, dass IMAPFolder implementiert UIDFolder [link] (https://javamail.java.net/nonav/docs/api/com/sun/mail/imap/IMAPFolder.html) – davesbrain

Antwort

1

Ich nehme an, Sie sprechen über IMAP UIDs und Sie wissen, wie IMAP UIDs funktionieren. Die gelöschte Antwort hat das gut erklärt. Folder.search bietet Ihnen eine Reihe von Message-Objekten. Mit der UIDFolder.getUID-Methode können Sie über jedes dieser Message-Objekte iterieren und die entsprechende UID abrufen. Mit der Folder.fetch-Methode können Sie diese UIDs mit einem einzigen IMAP-Befehl vorab abrufen, sodass die Iteration über jede Nachricht zum Abrufen ihrer UID lokal erfolgt. Wenn Sie die UIDs speichern, können Sie später die UIDFolder-Methoden verwenden, um die entsprechenden Message-Objekte zurückzuerhalten. Vergessen Sie nicht, die UIDVALIDITÄT zu überprüfen.

+0

Danke, ich kämpfte, weil Ich habe nicht verstanden, warum das Message-Objekt nicht die UID – davesbrain

+0

enthält, da nur IMAP-Nachrichten UIDs haben. Die IMAP UID-Unterstützung wird durch die UIDFolder-Schnittstelle dargestellt. Ich nehme an, wir hätten eine UIDMessage-Schnittstelle mit einer getUID-Methode haben können, aber es schien genauso einfach zu sein, diese einzelne Methode in die UIDFolder-Methode aufzunehmen, da die UIDs alle relativ zum Ordner sind. –