JavaMail API - IMAP 服务器



IMAP 是 **互联网消息访问协议 (Internet Message Access Protocol)** 的缩写。它是一个应用层互联网协议,允许电子邮件客户端访问远程邮件服务器上的电子邮件。IMAP 服务器通常监听众所周知的端口 143。使用 SSL 的 IMAP (IMAPS) 则分配给端口号 993。

IMAP 支持在线和离线两种操作模式。使用 IMAP 的电子邮件客户端通常会将邮件保留在服务器上,直到用户显式删除它们。

包 **com.sun.mail.imap** 是 JavaMail API 的 IMAP 协议提供程序,它提供对 IMAP 消息存储的访问。下表列出了此提供程序的接口和类

类/接口描述
IMAPFolder.ProtocolCommand这是一个用于用户自定义 IMAP 协议命令的简单 *接口*。
ACL这是一个类。特定身份验证标识符(用户或组)的访问控制列表条目。
IMAPFolder此类实现了一个 IMAP 文件夹。
IMAPFolder.FetchProfileItem这是一个用于获取邮件头的类。
IMAPMessage此类实现了一个 ReadableMime 对象。
IMAPMessage.FetchProfileCondition此类实现对文件夹中每条邮件进行的测试。
IMAPSSLStore此类提供通过 SSL 访问 IMAP 消息存储的途径。
IMAPStore此类提供对 IMAP 消息存储的访问。
Rights此类表示身份验证标识符(例如,用户或组)的一组权限。
Rights.Right此内部类表示单个权限。
SortTerm根据 RFC 5256 定义的特定排序标准。

关于此提供程序的一些注意事项

  • 此提供程序支持 IMAP4 和 IMAP4rev1 协议。

  • 已连接的 IMAPStore 维持一个 IMAP 协议对象的池,用于与 IMAP 服务器通信。当打开文件夹并需要新的 IMAP 协议对象时,IMAPStore 将从连接池中提供它们,或者在没有可用对象时创建它们。当文件夹关闭时,如果池……,则其 IMAP 协议对象将返回到连接池。

  • 已连接的 IMAPStore 对象可以维护一个单独的 IMAP 协议对象,该对象为存储提供与 IMAP 服务器的专用连接,也可以不维护。

IMAP 协议提供程序支持以下属性,这些属性可以在 JavaMail Session 对象中设置。这些属性始终设置为字符串;“类型”列描述了字符串的解释方式。

名称类型描述
mail.imap.user字符串IMAP 的默认用户名。
mail.imap.host字符串要连接到的 IMAP 服务器。
mail.imap.port整数要连接到的 IMAP 服务器端口,如果 connect() 方法没有显式指定端口,则使用此端口。默认为 143。
mail.imap.partialfetch布尔值控制是否应使用 IMAP 部分获取功能。默认为 true。
mail.imap.fetchsize整数部分获取大小(以字节为单位)。默认为 16K。
mail.imap.ignorebodystructuresize布尔值IMAP BODYSTRUCTURE 响应包括每个正文部分的确切大小。通常,此大小用于确定要为每个正文部分获取多少数据。默认为 false。
mail.imap.connectiontimeout整数以毫秒为单位的套接字连接超时值。默认为无限超时。
mail.imap.timeout整数以毫秒为单位的套接字 I/O 超时值。默认为无限超时。
mail.imap.statuscachetimeout整数STATUS 命令响应缓存的超时值(以毫秒为单位)。默认为 1000(1 秒)。零表示禁用缓存。
mail.imap.appendbuffersize整数向 IMAP 文件夹追加时在内存中缓冲的消息的最大大小。
mail.imap.connectionpoolsize整数连接池中可用连接的最大数量。默认为 1。
mail.imap.connectionpooltimeout整数连接池连接的超时值(以毫秒为单位)。默认为 45000(45 秒)。
mail.imap.separatestoreconnection布尔值标志,指示是否为存储命令使用专用存储连接。默认为 false。
mail.imap.auth.login.disable布尔值如果为 true,则阻止使用非标准 AUTHENTICATE LOGIN 命令,而是使用简单的 LOGIN 命令。默认为 false。
mail.imap.auth.plain.disable布尔值如果为 true,则阻止使用 AUTHENTICATE PLAIN 命令。默认为 false。
mail.imap.auth.ntlm.disable布尔值如果为 true,则阻止使用 AUTHENTICATE NTLM 命令。默认为 false。
mail.imap.proxyauth.user字符串如果服务器支持 PROXYAUTH 扩展,此属性指定要充当的用户名称。使用管理员凭据对服务器进行身份验证。身份验证后,IMAP 提供程序将使用此属性中指定的用户名称发出 PROXYAUTH 命令。
mail.imap.localaddress字符串创建 IMAP 套接字时要绑定的本地地址(主机名)。默认为 Socket 类选择的地址。
mail.imap.localport整数创建 IMAP 套接字时要绑定的本地端口号。默认为 Socket 类选择的端口号。
mail.imap.sasl.enable布尔值如果设置为 true,则尝试使用 javax.security.sasl 包为登录选择身份验证机制。默认为 false。
mail.imap.sasl.mechanisms字符串要尝试使用的 SASL 机制名称的空格或逗号分隔列表。
mail.imap.sasl.authorizationid字符串在 SASL 身份验证中使用的授权 ID。如果未设置,则使用身份验证 ID(用户名)。
mail.imap.sasl.realm字符串用于需要领域的 SASL 身份验证机制(如 DIGEST-MD5)的领域。
mail.imap.auth.ntlm.domain字符串NTLM 身份验证域。
mail.imap.auth.ntlm.flags整数NTLM 协议特定的标志。
mail.imap.socketFactory套接字工厂如果设置为实现 javax.net.SocketFactory 接口的类,则此类将用于创建 IMAP 套接字。
mail.imap.socketFactory.class字符串如果设置,则指定实现 javax.net.SocketFactory 接口的类的名称。此类将用于创建 IMAP 套接字。
mail.imap.socketFactory.fallback布尔值如果设置为 true,则使用指定的套接字工厂类创建套接字失败将导致使用 java.net.Socket 类创建套接字。默认为 true。
mail.imap.socketFactory.port整数使用指定的套接字工厂时要连接到的端口。未设置时使用默认端口。
mail.imap.ssl.enable布尔值如果设置为 true,则使用 SSL 连接并默认使用 SSL 端口。对于“imap”协议默认为 false,对于“imaps”协议默认为 true。
mail.imap.ssl.checkserveridentity布尔值如果设置为 true,则根据 RFC 2595 指定检查服务器身份。默认为 false。
mail.imap.ssl.trust字符串如果设置,并且未指定套接字工厂,则启用 MailSSLSocketFactory 的使用。
如果设置为“*”,则信任所有主机。
如果设置为主机名的空格分隔列表,则信任这些主机。
否则,信任取决于服务器提供的证书。
mail.imap.ssl.socketFactorySSL 套接字工厂如果设置为扩展 javax.net.ssl.SSLSocketFactory 类的类,则此类将用于创建 IMAP SSL 套接字。
mail.imap.ssl.socketFactory.class字符串如果设置,则指定扩展 javax.net.ssl.SSLSocketFactory 类的类的名称。此类将用于创建 IMAP SSL 套接字。
mail.imap.ssl.socketFactory.port整数使用指定的套接字工厂时要连接到的端口。如果未设置,则使用默认端口。
mail.imap.ssl.protocols字符串指定将为 SSL 连接启用的 SSL 协议。属性值为 javax.net.ssl.SSLSocket.setEnabledProtocols 方法可接受的令牌的空格分隔列表。
mail.imap.starttls.enable布尔值如果为 true,则启用 STARTTLS 命令的使用(如果服务器支持),以便在发出任何登录命令之前将连接切换到受 TLS 保护的连接。默认为 false。
mail.imap.starttls.required布尔值如果为 true,则需要使用 STARTTLS 命令。如果服务器不支持 STARTTLS 命令,或者命令失败,则 connect 方法将失败。默认为 false。
mail.imap.socks.host字符串指定将用于连接到邮件服务器的 SOCKS5 代理服务器的主机名。
mail.imap.socks.port字符串指定 SOCKS5 代理服务器的端口号。只有当代理服务器未使用标准端口号 1080 时才需要使用此端口。
mail.imap.minidletime整数此属性设置延迟(以毫秒为单位)。如果未设置,则默认为 10 毫秒。
mail.imap.enableimapevents布尔值启用将特定于 IMAP 的特殊事件传递到 Store 的 ConnectionListener。如果为 true,则在 Store 的空闲方法期间接收到的非请求响应将作为 ConnectionEvents 发送,其类型为 IMAPStore.RESPONSE。事件的消息将是原始 IMAP 响应字符串。默认情况下,不会发送这些事件。
mail.imap.folder.class字符串com.sun.mail.imap.IMAPFolder 的子类的类名。此子类可用于提供对其他 IMAP 命令的支持。此子类必须具有以下形式的公共构造函数:public MyIMAPFolder(String fullName, char separator, IMAPStore store, Boolean isNamespace) 和 public MyIMAPFolder(ListInfo li, IMAPStore store)

通常,应用程序不需要直接使用此包中的类。相反,它们应该使用 javax.mail 包(和子包)定义的 API。应用程序绝不应直接构造 IMAPStore 或 IMAPFolder 的实例。相反,它们应该使用 Session 方法 getStore 获取适当的 Store 对象,并从中获取 Folder 对象。

使用 IMAP 服务器的示例在第 配额管理 章中进行了演示。

广告
© . All rights reserved.