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?
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
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();
}
Sie können auf andere Ordner wie folgt zugreifen
store.getFolder("[Gmail]/Sent Mail");
store.getFolder("[Gmail]/Drafts");
usw.
Wie wäre es mit store.getDefaultFolder().list()
? Nur eine Vermutung.