Как получить список доступных папок в почтовом аккаунте, используя JavaMail - PullRequest
37 голосов
/ 25 января 2011

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

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

Ответы [ 4 ]

62 голосов
/ 26 января 2011

Сергей близко, но по умолчанию list() JavaMail делает 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();
}
35 голосов
/ 25 января 2011

Вот код, который работает.Это даст вам доступ ко всем ярлыкам.Чтобы углубиться в 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", "YOURMAILID@gmail.com", "UR_P@ZZWRD");
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

8 голосов
/ 23 августа 2011

Вы можете получить доступ к другим папкам, как это

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

и т. Д.

0 голосов
/ 25 января 2011

Как насчет store.getDefaultFolder().list()? Просто предположение, хотя.

...