sun*_*nil 4 java email javax.mail
使用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();
Run Code Online (Sandbox Code Playgroud)
您应该使用实现QuotaAwareStore接口的store ,例如IMAPSSLStore或IMAPStore。在这样的商店和每个“资源”的配额对象检查数组上调用“ 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));
}
}
Run Code Online (Sandbox Code Playgroud)
在控制台中为我的帐户输出:
quotaRoot:'' 名称:“ STORAGE”,限制:“ 10486380”,用法:“ 1564”
编辑
和尝试查找配额和文件夹大小之间的相关性的另一个示例:
IMAP配额和文件夹大小大示例
摘要,基于JavaMail JavaDoc和GMail上的一个大示例得出的结果:
Folder可能具有相同的Quota对象。例如,GMail Quota在所有文件夹之间只有一个共享。Folder是逻辑实体(不同于文件系统上的文件夹)。例如,GMail的文件夹[Gmail]/All Mail包含其他文件夹的邮件。limit以及由GMail usage返回的值(Quota以千字节为单位)。因此,如果需要显示剩余空间,则应该使用Quota。如果需要显示带有消息的网格并按大小排序,则应使用folder.getMessages()和message.getSize()。