import com.sun.mail.imap.IMAPStore; import org.junit.Test; import javax.mail.*; import javax.mail.internet.MimeMessage; import java.util.Date; import java.util.Properties; public class Main { @Test public void imap() throws MessagingException { Properties prop = System.getProperties(); String host = "imap.gmail.com"; String username = "user@gmail.com"; String password = "some-password"; prop.setProperty("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); prop.setProperty("mail.imap.host", host); prop.setProperty("mail.imap.port", "993"); prop.setProperty("mail.imap.starttls.enable", "true"); prop.setProperty("mail.imap.socketFactory.fallback", "false"); //prop.setProperty("mail.debug", "true"); Session ses = Session.getInstance(prop, null); Store store = ses.getStore("imap"); store.connect(host, username, password); if (!IMAPStore.class.isInstance(store)) throw new IllegalStateException("Is not IMAPStore"); IMAPStore imapStore = (IMAPStore) store; Folder defaultFolder = imapStore.getDefaultFolder(); this.printFolderInfo(imapStore, defaultFolder, 1); } private void printQuotaInfo(IMAPStore store, Folder folder) throws MessagingException { Quota[] quotas; try { quotas = store.getQuota(folder.getFullName()); } catch (MessagingException e) { if (e.getMessage().contains(" NO [NONEXISTENT] Unknown folder:")) return; throw e; } for (Quota quota : quotas) { System.out.println(String.format("quotaRoot:'%s'", quota.quotaRoot)); for (Quota.Resource resource : quota.resources) { System.out.println(String.format("name:'%s', limit:'%s', usage:'%s',", resource.name, resource.limit, resource.usage)); } } } private long printFolderInfo(IMAPStore store, Folder folder, int level) throws MessagingException { long sizeSum = 0; long sizeMessages = 0; try { folder.open(Folder.READ_ONLY); for (Message message : folder.getMessages()) sizeSum = sizeSum + message.getSize(); folder.close(false); } catch (MessagingException e) { if (e.getMessage().compareTo("folder cannot contain messages") != 0) throw e; } sizeMessages = sizeSum; for (Folder child : folder.list()) sizeSum = sizeSum + this.printFolderInfo(store, child, level + 1); System.out.println("---"); System.out.println(String.format("%s - folderFullName:'%s', folderSizeMessages:'%s', folderSizeSum:'%s'", level, folder.getFullName(), sizeMessages, sizeSum)); this.printQuotaInfo(store, folder); return sizeSum; } }