JavaMail API - 配额管理

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 QUOTA 扩展定义的配额模型。 GmailSSLStore、GmailStore、IMAPSSLStore、IMAPStore 是此接口的已知实现类。

让我们在以下部分中查看一个示例,该示例检查邮件存储名称、限制及其使用情况。

创建 Java 类

创建一个 Java 类文件 QuotaExample,其内容如下:

package com.tutorialspoint;

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

         // 创建 IMAP3 存储对象并连接 pop 服务器
         Store store = emailSession.getStore("imaps");

         //相应地更改用户和密码
         store.connect("imap.gmail.com", "abc@gmail.com", "*****");
         IMAPStore imapStore = (IMAPStore) store;
         System.out.println("imapStore ---" + imapStore);

         //获取配额
         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));
            }
         }
      } catch (Exception e) 
      {
         e.printStackTrace();
      }
   }
}

这里是通过 IMAP (imap.gmail.com) 服务器连接到 gmail 服务的,因为 IMAPStore 实现了 QuotaAwareStore。获取 Store 对象后,获取 Quota 数组并对其进行迭代,然后打印相关信息。

编译并运行

现在我们的类已准备就绪,让我们编译上述类。我已将 QuotaExample.java 类保存到目录:/home/manisha/JavaMailAPIExercise。我们需要类路径中的 jar 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'