使用javax.mail或任何相关的Java库,可以做些什么来了解用户的邮件存储空间大小,可用空间大小以及可用空间总量?
我使用javax.mail api获取有关消息的信息。
Message message = new MimeMessage(session);
folder1 = store.getDefaultFolder();
folder1 = folder1.getFolder(boxType);
System.out.println("folder found :"
+ folder1.exists()
+ "folder name is "
+ folder1.getFullName());
folder1.open(Folder.READ_ONLY);
messages = folder1.getMessages();
答案 0 :(得分:4)
您应该使用实现QuotaAwareStore界面的商店,例如IMAPSSLStore或IMAPStore。在这样的商店和每个Quota对象检查“资源”数组上调用“getQuota”。每个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));
}
}
在我的帐户的控制台中输出:
quotaRoot:'' name:'STORAGE', limit:'10486380', usage:'1564'
修改强>
另一个例子是尝试查找配额和文件夹大小之间的相关性:
IMAP quota and folder size big example
总结,基于JavaMail JavaDoc和GMail上的大例子的结果:
Folder
可能有相同的Quota
个对象。例如,GMail在所有文件夹之间只共享一个Quota
。Folder
是逻辑实体(不像文件系统上的文件夹)。例如,GMail的文件夹[Gmail]/All Mail
包含来自其他文件夹的邮件。limit
返回的usage
和Quota
值以千字节为单位。因此,如果您需要显示剩余的空间,则应使用Quota
。如果您需要使用消息显示网格并按大小排序,则应使用folder.getMessages()
和message.getSize()
。