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 定义。

在上面此提供程序这部分中需要注意一些要点:

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

  2. 一个已连接的 IMAPStore 维护了一个 IMAP 协议对象池,用于与 IMAP 服务器进行通信。当打开文件夹并需要新的 IMAP 协议对象时,IMAPStore 将从连接池中提供它们,或者在没有可用时创建它们。当一个文件夹被关闭时,如果连接池 .

  3. 连接的 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 服务器的示例。