Сергей близко, но по умолчанию 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();
}