Javamail Api 简明教程
JavaMail API - IMAP Servers
IMAP 是 Internet Message Access Protocol 的首字母缩写。它是一种应用程序层 Internet 协议,允许电子邮件客户端访问远程邮件服务器上的电子邮件。IMAP 服务器通常侦听知名端口 143。SSL 上的 IMAP(IMAPS)分配到端口号 993。
IMAP 支持联机和离线两种操作模式。使用 IMAP 的电子邮件客户端通常将邮件保留在服务器上,直到用户明确地删除它们。
包 com.sun.mail.imap 是 JavaMail API 的 IMAP 协议提供程序,可访问 IMAP 邮件存储。下表列出了此提供程序的接口和类:
Class/Interface |
Description |
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 将从连接池中提供它们,或者在没有可用时创建它们。当一个文件夹被关闭时,如果连接池 .
-
连接的 IMAPStore 对象可能会或可能不会维护一个单独的 IMAP 协议对象,该对象向存储提供与 IMAP 服务器的专用连接。
IMAP 协议提供者支持以下属性,这些属性可以设置在 JavaMail Session 对象中。属性始终设置成字符串; Type 列描述字符串的解释方式。
Name |
Type |
Description |
mail.imap.user |
String |
IMAP 的默认用户名。 |
mail.imap.host |
String |
要连接的 IMAP 服务器。 |
mail.imap.port |
int |
如果 connect() 方法未明确指定一个,则要连接的 IMAP 服务器端口。默认为 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 |
需要领域的身份验证机制(例如 DIGEST-MD5)要使用的领域。 |
mail.imap.auth.ntlm.domain |
String |
The NTLM authentication domain. |
mail.imap.auth.ntlm.flags |
int |
NTLM protocol-specific flags. |
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 的空闲方法期间收到的未经请求的响应将作为类型为 IMAPStore.RESPONSE 的 ConnectionEvents 发送。事件消息将是原始 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 的实例。相反,它们应使用会话方法 getStore 获取适当的 Store 对象,并从中获取文件夹对象。
在章节 Quota Management 中演示了如何使用 IMAP 服务器的示例。