it-swarm.com.de

So rufen Sie die Liste der verfügbaren Ordner in einem E-Mail-Konto mit JavaMail ab

Ich verwende die JavaMail-API, um eine Verbindung zu meinem persönlichen Konto herzustellen. Ich habe eine Liste von Ordnern (Labels) in meinem Google Mail-Konto, die ich erstellt habe, sowie die Standardordner (Posteingang, Entwürfe usw.). 

Ich kann mit dieser API auf den jeweiligen Ordner zugreifen: Folder inbox = store.getFolder("Inbox");. Gibt es eine andere API, um die Liste der in einem E-Mail-Konto verfügbaren Ordner abzurufen?

36
Jagadesh

Hier ist der Code, der funktioniert. Dadurch erhalten Sie alle Etiketten in den Griff. Um tiefer in eine folder zu gehen, können Sie folder.list() ausführen oder store.getDefaultFolder().list("*") verwenden, um alle Ordner und Unterordner abzurufen, wie in der anderen Antwort vorgeschlagen.

Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", "[email protected]", "[email protected]");
System.out.println(store);

Folder[] f = store.getDefaultFolder().list();
for(Folder fd:f)
    System.out.println(">> "+fd.getName());

Ausgabe:

>> INBOX
>> Persönlich
>> Quittungen
>> Reisen
>> Arbeit
>> [Gmail]


ALTE ANTWORT 

Bitte beachten Sie, dass dies nicht korrekt ist. Es wird zu Recht darauf verwiesen - diese Antwort von dkarp

Diese sollten tun:

http://Java.Sun.com/products/javamail/javadocs/javax/mail/Store.html#getSharedNamespaces%28%29

http://Java.Sun.com/products/javamail/javadocs/javax/mail/Store.html#getUserNamespaces%28Java.lang.String%29 </ strike>

31
Nishant

Sergey ist nah dran, aber standardmäßig führt JavaMails list() einen LIST "" % aus, der nur Ordner der obersten Ebene enthält. GMail legt die Systemordner (Alle E-Mails, Entwürfe, Gesendete E-Mails, Spam, Markierte E-Mails und Papierkorb) unter dem nicht auswählbaren Ordner [Gmail] ab, sodass Sie wirklich einen LIST "" * ausführen müssen. Andernfalls erhalten Sie nur INBOX, [Gmail] und Ihre Etiketten zurück.

Hier ist ein Beispielcode, der eine Verbindung zu GMail herstellt, die Ordnerliste abruft und den Namen und die Anzahl der Nachrichten für jeden nicht -\NoSelect -Ordner ausgibt (dh diejenigen, die nicht nur Hierarchie-Platzhalter sind, wie [Gmail]). ):

Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
try {
    Session session = Session.getDefaultInstance(props, null);
    javax.mail.Store store = session.getStore("imaps");
    store.connect("imap.gmail.com", "<username>@gmail.com", "<password>");
    javax.mail.Folder[] folders = store.getDefaultFolder().list("*");
    for (javax.mail.Folder folder : folders) {
        if ((folder.getType() & javax.mail.Folder.HOLDS_MESSAGES) != 0) {
            System.out.println(folder.getFullName() + ": " + folder.getMessageCount());
        }
    }
} catch (MessagingException e) {
    e.printStackTrace();
}
62
dkarp

Sie können auf andere Ordner wie folgt zugreifen 

store.getFolder("[Gmail]/Sent Mail");
store.getFolder("[Gmail]/Drafts");

usw.

7
user889386

Wie wäre es mit store.getDefaultFolder().list()? Nur eine Vermutung.

0
Sergei Tachenov