使用javax.mail(或类似的)查找可用的邮件存储空间,可用空间等

时间:2012-05-05 17:09:12

标签: 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();

1 个答案:

答案 0 :(得分:4)

您应该使用实现QuotaAwareStore界面的商店,例如IMAPSSLStoreIMAPStore。在这样的商店和每个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包含来自其他文件夹的邮件。
  • GMail为limit返回的
  • usageQuota值以千字节为单位。

因此,如果您需要显示剩余的空间,则应使用Quota。如果您需要使用消息显示网格并按大小排序,则应使用folder.getMessages()message.getSize()