JavaMail API - IMAP服务器

IMAP是互联网邮件访问协议的缩写.它是一种应用层Internet协议,允许电子邮件客户端访问远程邮件服务器上的电子邮件. IMAP服务器通常侦听众所周知的端口143.基于SSL的IMAP(IMAPS)被分配给端口号993.

IMAP支持在线和离线操作模式.使用IMAP的电子邮件客户端通常会在服务器上保留消息,直到用户明确删除它们为止.

Package com.sun.mail.imap 是JavaMail API的IMAP协议提供程序,提供对IMAP消息存储的访问.下表列出了此提供程序的接口和类:

Class/接口描述
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字符串IMAP的默认用户名.
mail.imap.hostString要连接的IMAP服务器.
mail.imap.portint要连接的IMAP服务器端口,如果connect()方法未明确指定一.默认为143.
mail.imap.partialfetchboolean控制是否具有IMAP部分提取功能应该使用.默认为true.
mail.imap.fetchsizeint部分提取大小(以字节为单位).默认为16K.
mail.imap.ignorebodystructuresizebooleanIMAP BODYSTRUCTURE响应包括确切的大小每个身体部位.通常,此大小用于确定每个身体部位要获取的数据量.默认为false.
mail.imap.connectiontimeoutint套接字连接超时值,以毫秒为单位.默认为无限超时.
mail.imap.timeoutint套接字I/O超时值毫秒.默认为无限超时.
mail.imap.statuscachetimeoutint缓存的超时值(以毫秒为单位) STATUS命令响应.默认值为1000(1秒).零禁用缓存.
mail.imap.appendbuffersizeint要缓冲的邮件的最大大小附加到IMAP文件夹时的内存.
mail.imap.connectionpoolsizeint最大可用数量连接池中的连接.默认值为1.
mail.imap.connectionpooltimeoutint连接池连接的超时值(以毫秒为单位) .默认值为45000(45秒).
mail.imap.separatestoreconnectionboolean标志是否表示为商店命令使用专用的商店连接.默认值为false.
mail.imap.auth.login.disableboolean如果为true,则阻止使用非标准AUTHENTICATE LOGIN命令,而不是使用plain LOGIN命令.默认值为false.
mail.imap.auth.plain.disableboolean如果为true,则阻止使用AUTHENTICATE PLAIN命令.默认值为false.
mail.imap.auth.ntlm.disableboolean如果为true,则阻止使用AUTHENTICATE NTLM命令.默认值为false.
mail.imap.proxyauth.userString如果服务器支持PROXYAUTH extension,此属性指定要充当的用户的名称.使用管理员凭据对服务器进行身份验证.身份验证后,IMAP提供程序将发出PROXYAUTH命令,其中包含此属性中指定的用户名.
mail.imap.localaddressString创建IMAP套接字时要绑定的本地地址(主机名).默认为Socket类选择的地址.
mail.imap.localportint本地端口创建IMAP套接字时要绑定的数字.默认为Socket类选择的端口号.
mail.imap.sasl.enableboolean如果设置为true,请尝试使用javax.security.sasl包来选择登录的身份验证机制.默认为false.
mail.imap.sasl.mechanismsString空格或逗号分隔列表尝试使用的SASL机制名称.
mail.imap.sasl.authorizationidString在SASL身份验证中使用的授权标识.如果未设置,则使用身份验证ID(用户名).
mail.imap.sasl.realmString用于需要领域的SASL身份验证机制的领域,例如DIGEST-MD5.
mail.imap.auth.ntlm.domain字符串NTLM身份验证域.
mail.imap.auth.ntlm.flagsintNTLM协议特定标志.
mail.imap.socketFactory套接字工厂如果设置为实现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.socketFactorySSL套接字工厂如果设置为扩展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.protocolsstring指定将为SSL连接启用的SSL协议.属性值是以空格分隔的javax.net.ssl.SSLSocket.setEnabledProtocols方法可接受的标记列表.
mail.imap.starttls.enableboolean如果为true,则允许使用STARTTLS命令(如果服务器支持)在发出任何登录命令之前将连接切换到受TLS保护的连接.默认值为false.
mail.imap.starttls.requiredboolean如果为true,则需要使用STARTTLS命令.如果服务器不支持STARTTLS命令,或者命令失败,则connect方法将失败.默认为false.
mail.imap.socks.hoststring指定a的主机名SOCKS5代理服务器,用于连接邮件服务器.
mail.imap.socks.portstring指定SOCKS5代理服务器的端口号.仅当代理服务器未使用标准端口号1080时才需要使用此功能.
mail.imap.minidletimeint此属性设置延迟(以毫秒为单位).如果未设置,则默认值为10毫秒.
mail.imap.enableimapeventsboolean启用特殊功能要传递给Store的ConnectionListener的特定于IMAP的事件.如果为true,则在Store的idle方法期间收到的未经请求的响应将作为ConnectionEvents发送,其类型为IMAPStore.RESPONSE.事件的消息将是原始IMAP响应字符串.默认情况下,不会发送这些事件.
mail.imap.folder.classString类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服务器的示例.