IMAPSSLStoreやIMAPStoreなどのQuotaAwareStoreインターフェースを実装するストアを使用する必要があります。そのようなストアで「getQuota」を呼び出し、各Quotaオブジェクトで「リソース」の配列を確認します。各Quota.Resourceには、「制限」と「使用量」の値が含まれています。
Properties prop = System.getProperties();
String host = "imap.gmail.com";
String username = "user@google.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;
Quota[] quotas = imapStore.getQuota("INBOX");
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));
}
}
私のアカウントのコンソールでの出力:
クォータルート:''
名前:'STORAGE'、制限:'10486380'、使用法:'1564'
EDIT
そして、クォータとフォルダサイズの間の相関関係を見つけようとする別の例:
IMAP クォータとフォルダサイズの大きな例
JavaMail JavaDoc に基づく要約と、GMail の大きな例の結果:
- 複数
Folder
の が同じQuota
オブジェクトを持つことができます。たとえば、GMail では、Quota
すべてのフォルダ間で共有されるのは 1 つだけです。
Folder
論理エンティティです (ファイル システム上のフォルダーとは異なります)。たとえば、GMail には[Gmail]/All Mail
、他のフォルダーからのメッセージを含むフォルダーがあります。
limit
キロバイト単位で測定されたGMailによってusage
返される値。Quota
したがって、残りのスペースを表示する必要がある場合は、 を使用する必要がありますQuota
。また、メッセージ付きのグリッドを表示し、サイズで並べ替える必要がある場合は、 and を使用する必要がfolder.getMessages()
ありmessage.getSize()
ます。