Как получить список доступных папок в учетной записи электронной почты с помощью JavaMail
Я использую API JavaMail для подключения к своей личной учетной записи. У меня есть список папок (меток) в моей учетной записи Gmail, которые я создал + по умолчанию, такие как папки "Входящие", "Черновики" и т.д. Как я могу перечислить все доступные папки (по умолчанию и созданный пользователем)?
Я могу получить доступ к конкретной папке с помощью этого API: Folder inbox = store.getFolder("Inbox");
. Есть ли какой-либо другой API для получения списка папок, доступных в почтовой учетной записи?
Ответы
Ответ 1
Вот код, который работает. Это даст вам доступ ко всем ярлыкам. Чтобы углубиться в folder
, вы можете выполнить folder.list()
, или вы можете использовать store.getDefaultFolder().list("*")
для извлечения всех папок и подпапок, как предложено в другом ответе.
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());
Вывод:
→ INBOX
→ Личные
→ Квитанции
→ Путешествие
→ Работа
→ [Gmail]
СТАРЫЙ ОТВЕТ
Обратите внимание, что это неверно, это верно указано в этом ответе dkarp
Они должны делать:
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
Ответ 2
Сергей близок, но по умолчанию JavaMail list()
делает LIST "" %
, который дает вам только папки верхнего уровня. GMail ставит свои системные папки ( "Вся почта", "Черновики", "Отправленная почта", "Спам", "Помечено" и "Корзина" ) в папке с возможностью выбора [Gmail]
, поэтому вам действительно нужно сделать LIST "" *
. В противном случае вы просто вернетесь INBOX
, [Gmail]
и ваши метки.
Вот пример кода, который соединяется с GMail, выбирает список папок и выводит имя и количество сообщений для каждой папки не \NoSelect
(т.е. те, которые не являются только заполнителями иерархии, например [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();
}
Ответ 3
Вы можете получить доступ к другим папкам, таким как
store.getFolder("[Gmail]/Sent Mail");
store.getFolder("[Gmail]/Drafts");
и др.
Ответ 4
Как насчет store.getDefaultFolder().list()
? Просто предположим, однако.