JavaMail API - IMAP 服务器

IMAP 是 Internet 消息访问协议 的缩写。它是一种应用层 Internet 协议,允许电子邮件客户端访问远程邮件服务器上的电子邮件。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 对象中设置。这些属性始终设置为字符串;Type 列描述了如何解释字符串。

名称类型描述
mail.imap.userStringIMAP 的默认用户名。
mail.imap.hostString要连接的 IMAP 服务器。
mail.imap.portint要连接的 IMAP 服务器端口(如果 connect() 方法未明确指定)。默认为 143。
mail.imap.partialfetch boolean控制是否应使用 IMAP 部分提取功能。默认为 true。
mail.imap.fetchsizeint部分提取大小(以字节为单位)。默认为 16K。
mail.imap.ignorebodystructuresize booleanIMAP BODYSTRUCTURE 响应包括每个正文部分的确切大小。通常,此大小用于确定每个正文部分要提取多少数据。默认为 false。
mail.imap.connectiontimeoutint套接字连接超时值(以毫秒为单位)。默认为无限超时。
mail.imap.timeout int套接字 I/O 超时值(以毫秒为单位)。默认为无限超时。
mail.imap.statuscachetimeoutintSTATUS 命令响应缓存的超时值(以毫秒为单位)。默认为 1000(1 秒)。零表示禁用缓存。
mail.imap.appendbuffersizeint附加到 IMAP 文件夹时,内存中缓冲的消息的最大大小。
mail.imap.connectionpoolsize int连接池中可用的最大连接数。默认值为 1。
mail.imap.connectionpooltimeoutint连接池连接的超时值(以毫秒为单位)。默认值为 45000(45 秒)。
mail.imap.separatestoreconnection boolean用于指示是否对存储命令使用专用存储连接的标志。默认为 false。
mail.imap.auth.login.disableboolean如果为 true,则阻止使用非标准 AUTHENTICATE LOGIN 命令,而是使用普通的 LOGIN 命令。默认为 false。
mail.imap.auth.plain.disable boolean如果为 true,则阻止使用 AUTHENTICATE PLAIN 命令。默认为 false。
mail.imap.auth.ntlm.disableboolean如果为 true,则阻止使用 AUTHENTICATE NTLM 命令。默认值为 false。
mail.imap.proxyauth.userString如果服务器支持 PROXYAUTH 扩展,此属性指定要充当的用户的名称。使用管理员凭据向服务器进行身份验证。身份验证后,IMAP 提供程序将使用此属性中指定的用户名发出 PROXYAUTH 命令。
mail.imap.localaddressString创建 IMAP 套接字时要绑定到的本地地址(主机名)。默认为 Socket 类选择的地址。
mail.imap.localport int创建 IMAP 套接字时要绑定到的本地端口号。默认为 Socket 类选择的端口号。
mail.imap.sasl.enableboolean如果设置为 true,则尝试使用 javax.security.sasl 包选择登录的身份验证机制。默认为 false。
mail.imap.sasl.mechanismsString尝试使用的 SASL 机制名称的空格或逗号分隔列表。
mail.imap.sasl.authorizationidStringSASL 身份验证中使用的授权 ID。如果未设置,则使用身份验证 ID(用户名)。
mail.imap.sasl.realmString与需要领域的 SASL 身份验证机制一起使用的领域,例如 DIGEST-MD5。
mail.imap.auth.ntlm.domainStringNTLM 身份验证域。
mail.imap.auth.ntlm.flags intNTLM 协议特定的标志。
mail.imap.socketFactory Socket Factory如果设置为实现 javax.net.SocketFactory 接口的类,则此类将用于创建 IMAP套接字。
mail.imap.socketFactory.classString如果设置,则指定实现 javax.net.SocketFactory 接口的类的名称。此类将用于创建 IMAP 套接字。
mail.imap.socketFactory.fallbackboolean如果设置为 true,则使用指定的套接字工厂类创建套接字失败将导致使用 java.net.Socket 类创建套接字。默认为 true。
mail.imap.socketFactory.portint指定使用指定套接字工厂时要连接的端口。未设置时使用默认端口。
mail.imap.ssl.enableboolean如果设置为 true,则使用 SSL 进行连接并默认使用 SSL 端口。对于"imap"协议,默认为 false,对于"imaps"协议,默认为 true。
mail.imap.ssl.checkserveridentityboolean如果设置为 true,则按照 RFC 2595 的规定检查服务器身份。默认为 false。
mail.imap.ssl.trustString如果已设置,并且未指定套接字工厂,则启用 MailSSLSocketFactory 的使用。
如果设置为"*",则所有主机都受信任。
如果设置为以空格分隔的主机列表,则这些主机受信任。
否则,信任取决于服务器提供的证书。
mail.imap.ssl.socketFactory SSL socket Factory如果设置为扩展 javax.net.ssl.SSLSocketFactory 类的类,则此类将用于创建 IMAP SSL 套接字。
mail.imap.ssl.socketFactory.classString如果设置,则指定扩展 javax.net.ssl.SSLSocketFactory 类的类的名称。此类将用于创建 IMAP SSL 套接字。
mail.imap.ssl.socketFactory.portint指定使用指定套接字工厂时要连接的端口。如果未设置,将使用默认端口。
mail.imap.ssl.protocols string指定将为 SSL 连接启用的 SSL 协议。属性值是一个空格分隔的 javax.net.ssl.SSLSocket.setEnabledProtocols 方法可接受的令牌列表。
mail.imap.starttls.enable boolean如果为 true,则允许使用 STARTTLS 命令(如果服务器支持)在发出任何登录命令之前将连接切换到受 TLS 保护的连接。默认值为 false。
mail.imap.starttls.required boolean如果为 true,则需要使用 STARTTLS 命令。如果服务器不支持 STARTTLS 命令,或者命令失败,则 connect 方法将失败。默认为 false。
mail.imap.socks.host string指定用于连接到邮件服务器的 SOCKS5 代理服务器的主机名。
mail.imap.socks.portstring指定 SOCKS5 代理服务器的端口号。仅当代理服务器未使用标准端口号 1080 时才需要使用此属性。
mail.imap.minidletimeint此属性设置延迟(以毫秒为单位)。如果未设置,则默认为 10 毫秒。
mail.imap.enableimapevents boolean启用特殊的 IMAP 特定事件以传递到 Store 的 ConnectionListener。如果为 true,则 Store 的空闲方法期间收到的未经请求的响应将作为 ConnectionEvents 发送,类型为 IMAPStore.RESPONSE。事件的消息将是原始 IMAP 响应字符串。默认情况下,不会发送这些事件。
mail.imap.folder.classStringcom.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 服务器的示例在配额管理章中进行了演示。