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