JavaMail API - POP3 服务器



邮局协议 (POP) 是一种应用层互联网标准协议,本地电子邮件客户端使用它通过 TCP/IP 连接从远程服务器检索电子邮件。POP 支持简单的下载和删除需求,以访问远程邮箱。POP3 服务器监听众所周知的端口 110。

com.sun.mail.pop3 包是 JavaMail API 的 POP3 协议提供程序,它提供对 POP3 消息存储的访问。下表列出了此包中的类

名称描述
POP3FolderPOP3 文件夹(只能是“INBOX”)。
POP3MessagePOP3 消息。
POP3SSLStore使用 SSL 的 POP3 消息存储。
POP3StorePOP3 消息存储。

关于此提供程序的一些需要说明的要点

  • POP3 提供程序仅支持一个名为INBOX的文件夹。由于 POP3 协议的限制,JavaMail API 的许多功能(如事件通知、文件夹管理、标志管理等)都不允许。

  • 通过使用协议名称pop3或表单pop3://user:password@host:port/INBOX的 URL,通过 JavaMail API 访问 POP3 提供程序。

  • POP3 不支持永久标志。例如,Flags.Flag.RECENT 标志永远不会为 POP3 消息设置。应用程序需要自行确定 POP3 邮箱中的哪些邮件是新的

  • POP3 不支持 Folder.expunge() 方法。要删除和清除消息,请在消息上设置 Flags.Flag.DELETED 标志,并使用 Folder.close(true) 方法关闭文件夹。

  • POP3 不提供接收日期,因此 getReceivedDate 方法将返回 null。

  • 当访问 POP3 消息的标头时,POP3 提供程序使用 TOP 命令获取所有标头,然后将其缓存。

  • 当访问 POP3 消息的内容时,POP3 提供程序使用 RETR 命令获取整个消息。

  • POP3Message.invalidate 方法可用于使缓存数据无效,而无需关闭文件夹。

POP3 协议提供程序支持以下属性,这些属性可以在 JavaMail Session 对象中设置。这些属性始终设置为字符串;“类型”列描述了字符串的解释方式。

名称类型描述
mail.pop3.user字符串POP3 的默认用户名。
mail.pop3.host字符串要连接到的 POP3 服务器。
mail.pop3.port整数要连接到的 POP3 服务器端口,如果 connect() 方法没有明确指定端口。默认为 110。
mail.pop3.connectiontimeout整数以毫秒为单位的套接字连接超时值。默认为无限超时。
mail.pop3.timeout整数以毫秒为单位的套接字 I/O 超时值。默认为无限超时。
mail.pop3.rsetbeforequit布尔值在关闭文件夹时发送 POP3 RSET 命令,然后再发送 QUIT 命令。默认为 false。
mail.pop3.message.class字符串com.sun.mail.pop3.POP3Message 的子类的类名。子类可用于处理(例如)非标准的 Content-Type 标头。子类必须具有表单 MyPOP3Message(Folder f, int msgno) throws MessagingException 的公共构造函数。
mail.pop3.localaddress字符串创建 POP3 套接字时要绑定的本地地址(主机名)。默认为 Socket 类选择的地址。
mail.pop3.localport整数创建 POP3 套接字时要绑定的本地端口号。默认为 Socket 类选择的端口号。
mail.pop3.apop.enable布尔值如果设置为 true,则使用 APOP 而不是 USER/PASS 登录到 POP3 服务器(如果 POP3 服务器支持 APOP)。APOP 发送密码的摘要而不是明文密码。默认为 false。
mail.pop3.socketFactory套接字工厂如果设置为实现 javax.net.SocketFactory 接口的类,则此类将用于创建 POP3 套接字。
mail.pop3.socketFactory.class字符串如果设置,则指定实现 javax.net.SocketFactory 接口的类的名称。此类将用于创建 POP3 套接字。
mail.pop3.socketFactory.fallback布尔值如果设置为 true,则使用指定的套接字工厂类创建套接字失败将导致使用 java.net.Socket 类创建套接字。默认为 true。
mail.pop3.socketFactory.port整数指定使用指定的套接字工厂时要连接到的端口。如果未设置,将使用默认端口。
mail.pop3.ssl.enable布尔值如果设置为 true,则使用 SSL 连接并默认使用 SSL 端口。对于“pop3”协议,默认为 false;对于“pop3s”协议,默认为 true。
mail.pop3.ssl.checkserveridentity布尔值如果设置为 true,则根据 RFC 2595 指定的检查服务器身份。默认为 false。
mail.pop3.ssl.trust字符串如果设置,并且未指定套接字工厂,则启用 MailSSLSocketFactory 的使用。
如果设置为“*”,则所有主机都受信任。
如果设置为以空格分隔的主机列表,则这些主机受信任。
否则,信任取决于服务器提供的证书。
mail.pop3.ssl.socketFactorySSL 套接字工厂如果设置为扩展 javax.net.ssl.SSLSocketFactory 类的类,则此类将用于创建 POP3 SSL 套接字。
mail.pop3.ssl.socketFactory.class字符串如果设置,则指定扩展 javax.net.ssl.SSLSocketFactory 类的类的名称。此类将用于创建 POP3 SSL 套接字。
mail.pop3.ssl.socketFactory.port整数指定使用指定的套接字工厂时要连接到的端口。如果未设置,将使用默认端口。
mail.pop3.ssl.protocols字符串指定将为 SSL 连接启用的 SSL 协议。属性值是 javax.net.ssl.SSLSocket.setEnabledProtocols 方法可接受的标记的空格分隔列表。
mail.pop3.starttls.enable布尔值如果为 true,则启用 STLS 命令的使用(如果服务器支持),以便在发出任何登录命令之前将连接切换到 TLS 保护的连接。默认为 false。
mail.pop3.starttls.required布尔值如果为 true,则需要使用 STLS 命令。如果服务器不支持 STLS 命令,或者命令失败,则 connect 方法将失败。默认为 false。
mail.pop3.socks.host字符串指定将用于连接到邮件服务器的 SOCKS5 代理服务器的主机名。
mail.pop3.socks.port字符串指定 SOCKS5 代理服务器的端口号。
mail.pop3.disabletop布尔值如果设置为 true,则不会使用 POP3 TOP 命令获取邮件标头。默认为 false。
mail.pop3.forgettopheaders布尔值如果设置为 true,则可能已使用 POP3 TOP 命令检索的标头将被遗忘,并替换为作为 POP3 RETR 命令的一部分检索的标头。默认为 false。
mail.pop3.filecache.enable布尔值如果设置为 true,则 POP3 提供程序将在临时文件中缓存消息数据,而不是在内存中。仅在访问消息内容时才会将消息添加到缓存中。消息标头始终在内存中缓存(按需)。关闭文件夹或 JVM 终止时,将删除文件缓存。默认为 false。
mail.pop3.filecache.dir字符串如果启用了文件缓存,则可以使用此属性覆盖 JDK 用于临时文件的默认目录。
mail.pop3.cachewriteto布尔值控制 POP3 消息对象上 writeTo 方法的行为。如果设置为 true,并且尚未缓存消息内容,并且 ignoreList 为 null,则在写入之前缓存消息。否则,消息将直接流式传输到输出流,而不会被缓存。默认为 false。
mail.pop3.keepmessagecontent布尔值如果此属性设置为 true,则将保留对缓存内容的硬引用,防止内存被重用,直到关闭文件夹或显式取消缓存内容的缓存(使用 invalidate 方法)。默认为 false。

通常,应用程序不应直接使用此包中的类。相反,它们应使用javax.mail包(和子包)中定义的 API。应用程序绝不应直接构造POP3StorePOP3Folder的实例。相反,它们应使用 Session 方法 getStore 获取适当的 Store 对象,并从中获取 Folder 对象。

使用 POP3 服务器的示例在第 检查邮件 章中进行了演示。

广告

© . All rights reserved.