4

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();
4

1 に答える 1

5

IMAPSSLStoreIMAPStoreなどの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()ます。

于 2012-05-05T19:43:38.830 に答える