Подтвердить что ты не робот

Как получить список доступных папок в учетной записи электронной почты с помощью JavaMail

Я использую API JavaMail для подключения к своей личной учетной записи. У меня есть список папок (меток) в моей учетной записи Gmail, которые я создал + по умолчанию, такие как папки "Входящие", "Черновики" и т.д. Как я могу перечислить все доступные папки (по умолчанию и созданный пользователем)?

Я могу получить доступ к конкретной папке с помощью этого API: Folder inbox = store.getFolder("Inbox");. Есть ли какой-либо другой API для получения списка папок, доступных в почтовой учетной записи?

4b9b3361

Ответ 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()? Просто предположим, однако.