- JavaMail API 教程
- JavaMail - 首页
- JavaMail API - 概述
- JavaMail - 环境设置
- JavaMail - 核心类
- JavaMail - 发送邮件
- JavaMail - 查看邮件
- JavaMail - 获取邮件
- JavaMail - 身份验证
- JavaMail - 回复邮件
- JavaMail - 转发邮件
- JavaMail - 删除邮件
- JavaMail - Gmail SMTP 服务器
- JavaMail - 文件夹管理
- JavaMail - 配额管理
- JavaMail - 退回邮件
- JavaMail API 协议
- JavaMail - SMTP 服务器
- JavaMail - IMAP 服务器
- JavaMail - POP3 服务器
- JavaMail API 有用资源
- JavaMail - 快速指南
- JavaMail - 有用资源
- JavaMail - 讨论
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.socketFactory | SSL 套接字工厂 | 如果设置为扩展 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 服务器的示例在第 配额管理 章中进行了演示。