JavaMail - 配额管理

  • 简述

    JavaMail 中的配额是电子邮件存储中的有限或固定数量或数量的消息。每个邮件服务请求都计入 JavaMail API 调用配额。电子邮件服务可以应用以下配额标准:
    • 外发邮件消息的最大大小,包括附件。
    • 传入邮件消息的最大大小,包括附件。
    • 管理员为收件人时的最大邮件大小
    对于配额管理,JavaMail 有以下类:
    描述
    public class Quota 此类表示给定配额根的一组配额。每个配额根都有一组资源,由 Quota.Resource 类表示。每个资源都有一个名称(例如,“STORAGE”)、当前使用情况和使用限制。这只有一种方法setResourceLimit(String name, long limit)
    public static class Quota.Resource 表示配额根中的单个资源。
    public interface QuotaAwareStore 由支持配额的 Stores 实现的接口。该getQuotasetQuota方法支持由IMAP配额扩展定义的配额模式。GmailSSLStore、GmailStore、IMAPSSLStore、IMAPStore是该接口的已知实现类。
    让我们看看以下部分中的示例,其中检查邮件存储名称、限制及其使用情况。
  • 创建 Java 类

    创建一个java类文件 QuotaExample,其内容如下:
    
    package com.jc2182;
    import java.util.Properties;
    import javax.mail.Quota;
    import javax.mail.Session;
    import javax.mail.Store;
    import com.sun.mail.imap.IMAPStore;
    public class QuotaExample 
    {
       public static void main(String[] args) 
       {
          try 
          {
             Properties properties = new Properties();
             properties.put("mail.store.protocol", "imaps");
             properties.put("mail.imaps.port", "993");
             properties.put("mail.imaps.starttls.enable", "true");
             Session emailSession = Session.getDefaultInstance(properties);
             // emailSession.setDebug(true);
             // create the IMAP3 store object and connect with the pop server
             Store store = emailSession.getStore("imaps");
             //change the user and password accordingly
             store.connect("imap.gmail.com", "abc@gmail.com", "*****");
             IMAPStore imapStore = (IMAPStore) store;
             System.out.println("imapStore ---" + imapStore);
             //get quota
             Quota[] quotas = imapStore.getQuota("INBOX");
             //Iterate through the Quotas
             for (Quota quota : quotas) {
                System.out.println(String.format("quotaRoot:'%s'",
                   quota.quotaRoot));
                //Iterate through the Quota Resource
                for (Quota.Resource resource : quota.resources) {
                   System.out.println(String.format(
                      "name:'%s', limit:'%s', usage:'%s'", resource.name,
                      resource.limit, resource.usage));
                }
             }
          } catch (Exception e) 
          {
             e.printStackTrace();
          }
       }
    }
    
    这里是通过 IMAP (imap.gmail.com) 服务器连接到 gmail 服务,因为 IMAPStore 实现了 QuotaAwareStore。获得 Store 对象后,获取 Quota 数组并遍历它并打印相关信息。
  • 编译运行

    现在我们的类已经准备好了,让我们编译上面的类。我已将类 QuotaExample.java 保存到目录:/home/manisha/JavaMailAPIExercise. 我们需要类路径中的 jars javax.mail.jaractivation.jar。从命令提示符执行以下命令以编译类(两个 jar 文件都放在 /home/manisha/ 目录中):
    
    javac -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: QuotaExample.java
    
    现在类已经编译完成,执行下面的命令来运行:
    
    java -cp /home/manisha/activation.jar:/home/manisha/javax.mail.jar: QuotaExample
    
  • 验证输出

    您应该在命令控制台上看到类似的消息:
    
    imapStore ---imaps://abc%40gmail.com@imap.gmail.com
    quotaRoot:''
    name:'STORAGE', limit:'15728640', usage:'513'