JavaMail API - POP3 服务器
邮局协议 (POP) 是一种应用层 Internet 标准协议,本地电子邮件客户端使用它通过 TCP/IP 连接从远程服务器检索电子邮件。POP 支持访问远程邮箱的简单下载和删除要求。POP3 服务器监听众所周知的端口 110。
包 com.sun.mail.pop3 是 JavaMail API 的 POP3 协议提供程序,提供对 POP3 消息存储的访问。下表列出了此包中的类:
名称 | 说明 |
---|---|
POP3Folder | POP3 文件夹(只能是"收件箱")。 |
POP3Message | POP3 消息。 |
POP3SSLStore | 使用 SSL 的 POP3 消息存储。 |
POP3Store | POP3 消息存储。 |
此提供程序上方需要注意的一些要点:
POP3 提供程序仅支持单个名为 INBOX 的文件夹。由于 POP3 协议的限制,许多 JavaMail API 功能(如事件通知、文件夹管理、标志管理等)均不被允许。
使用协议名称 pop3 或 pop3://user:password@host:port/INBOX" 形式的 URL,可以通过 JavaMail API 访问 POP3 提供程序。
POP3 不支持永久标志。例如,永远不会为 POP3 消息设置 Flags.Flag.RECENT 标志。由应用程序确定 POP3 邮箱中的哪些消息是新。
POP3 不支持 Folder.expunge() 方法。要删除和清除消息,请在消息上设置 Flags.Flag.DELETED 标志,然后使用 Folder.close(true) 方法关闭文件夹。
POP3 不提供接收日期,因此 getReceivedDate 方法将返回 null。
访问 POP3 消息的标头时,POP3 提供程序使用 TOP 命令获取所有标头,然后缓存这些标头。
访问 POP3 消息的内容时,POP3 提供程序使用 RETR 命令获取整个消息。
可以使用 POP3Message.invalidate 方法使缓存数据无效,而无需关闭文件夹。
POP3 协议提供程序支持以下属性,这些属性可在 JavaMail Session 对象中设置。这些属性始终设置为字符串;Type 列描述了如何解释字符串。
名称 | 类型 | 描述 |
---|---|---|
mail.pop3.user | 字符串 | POP3 的默认用户名。 |
mail.pop3.host | 字符串 | 要连接的 POP3 服务器。 |
mail.pop3.port | int | 要连接的 POP3 服务器端口(如果 connect() 方法未明确指定)。默认为 110。 |
mail.pop3.connectiontimeout | int | 套接字连接超时值(以毫秒为单位)。默认为无限超时。 |
mail.pop3.timeout | int | 套接字 I/O 超时值(以毫秒为单位)。默认为无限超时。 |
mail.pop3.rsetbeforequit | boolean | 在关闭文件夹时发送 POP3 RSET 命令,然后再发送 QUIT 命令。默认值为 false。 |
mail.pop3.message.class | String | com.sun.mail.pop3.POP3Message 子类的类名。该子类可用于处理(例如)非标准 Content-Type 标头。该子类必须具有 MyPOP3Message(Folder f, int msgno) throws MessagingException 形式的公共构造函数。 |
mail.pop3.localaddress | String | 创建 POP3 套接字时要绑定到的本地地址(主机名)。默认为 Socket 类选取的地址。 |
mail.pop3.localport | int | 创建 POP3 套接字时要绑定到的本地端口号。默认为 Socket 类选取的端口号。 |
mail.pop3.apop.enable | boolean | 如果设置为 true,则使用 APOP 而不是 USER/PASS 登录 POP3 服务器(如果 POP3 服务器支持 APOP)。APOP 发送密码摘要,而不是明文密码。默认为 false。 |
mail.pop3.socketFactory | 套接字工厂 | 如果设置为实现 javax.net.SocketFactory 接口的类,则该类将用于创建 POP3 套接字。 |
mail.pop3.socketFactory.class | String | 如果设置,则指定实现 javax.net.SocketFactory 接口的类的名称。该类将用于创建 POP3 套接字。 |
mail.pop3.socketFactory.fallback | boolean | 如果设置为 true,则使用指定的套接字工厂类创建套接字失败将导致使用 java.net.Socket 类创建套接字。默认为 true。 |
mail.pop3.socketFactory.port | int | 指定使用指定套接字工厂时要连接的端口。如果未设置,则将使用默认端口。 |
mail.pop3.ssl.enable | boolean | 如果设置为 true,则使用 SSL 进行连接并默认使用 SSL 端口。对于"pop3"协议,默认为 false,对于"pop3s"协议,默认为 true。 |
mail.pop3.ssl.checkserveridentity | boolean | 如果设置为 true,则检查 RFC 2595 所指定的服务器身份。默认为 false。 |
mail.pop3.ssl.trust | String | 如果已设置,并且未指定套接字工厂,则启用 MailSSLSocketFactory 的使用。 如果设置为"*",则所有主机都受信任。 如果设置为以空格分隔的主机列表,则这些主机受信任。 否则,信任取决于服务器提供的证书。 |
mail.pop3.ssl.socketFactory | SSL 套接字工厂 | 如果设置为扩展 javax.net.ssl.SSLSocketFactory 类的类,则该类将用于创建 POP3 SSL 套接字。 |
mail.pop3.ssl.socketFactory.class | String | 如果设置,则指定扩展 javax.net.ssl.SSLSocketFactory 类的类的名称。此类将用于创建 POP3 SSL 套接字。 |
mail.pop3.ssl.socketFactory.port | int | 指定使用指定套接字工厂时要连接的端口。如果未设置,将使用默认端口。 |
mail.pop3.ssl.protocols | string | 指定将为 SSL 连接启用的 SSL 协议。属性值是一个空格分隔的 javax.net.ssl.SSLSocket.setEnabledProtocols 方法可接受的令牌列表。 |
mail.pop3.starttls.enable | boolean | 如果为 true,则允许使用 STLS 命令(如果服务器支持)在发出任何登录命令之前将连接切换到受 TLS 保护的连接。默认为 false。 |
mail.pop3.starttls.required | boolean | 如果为 true,则要求使用 STLS 命令。如果服务器不支持 STLS 命令,或者命令失败,则 connect 方法将失败。默认为 false。 |
mail.pop3.socks.host | string | 指定用于连接到邮件服务器的 SOCKS5 代理服务器的主机名。 |
mail.pop3.socks.port | string | 指定 SOCKS5 代理服务器的端口号。 |
mail.pop3.disabletop | boolean | 如果设置为 true,则不会使用 POP3 TOP 命令来获取邮件头。默认为 false。 |
mail.pop3.forgettopheaders | boolean | 如果设置为 true,则使用 POP3 TOP 命令可能检索到的标头将被遗忘,并由作为 POP3 RETR 命令的一部分检索到的标头替换。默认为 false。 |
mail.pop3.filecache.enable | boolean | 如果设置为 true,POP3 提供程序会将消息数据缓存在临时文件中,而不是内存中。只有在访问消息内容时,才会将消息添加到缓存中。消息头始终缓存在内存中(按需)。当文件夹关闭或 JVM 终止时,将删除文件缓存。默认为 false。 |
mail.pop3.filecache.dir | String | 如果启用了文件缓存,则可以使用此属性覆盖 JDK 用于临时文件的默认目录。 |
mail.pop3.cachewriteto | boolean | 控制 writeTo 方法对 POP3 消息对象的行为。如果设置为 true,并且消息内容尚未缓存,并且 ignoreList 为 null,则在写入之前缓存该消息。否则,消息将直接流式传输到输出流而不进行缓存。默认为 false。 |
mail.pop3.keepmessagecontent | boolean | 如果此属性设置为 true,将保留对缓存内容的硬引用,从而防止内存被重用,直到文件夹关闭或缓存内容明确失效(使用 invalidate 方法)。默认为 false。 |
通常,应用程序不应直接使用此包中的类。相反,它们应该使用 javax.mail 包(及其子包)定义的 API。应用程序永远不应直接构造 POP3Store 或 POP3Folder 的实例。相反,他们应该使用 Session 的 getStore 方法获取适当的 Store 对象,并从中获取 Folder 对象。
使用 POP3 服务器的示例在检查电子邮件一章中进行了演示。