Javamail Api 简明教程

JavaMail API - POP3 Servers

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

com.sun.mail.pop3 是适用于 JavaMail API 的 POP3 协议提供商,可访问 POP3 消息存储。下表列出了此包中的类:

Name

Description

POP3Folder

POP3 文件夹(只能是“收件箱”)。

POP3Message

A POP3 Message.

POP3SSLStore

使用 SSL 的 POP3 消息存储。

POP3Store

A POP3 Message Store.

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

  1. POP3 提供商仅支持名为 INBOX 的单个文件夹。由于 POP3 协议的限制,JavaMail API 的许多功能(如事件通知、文件夹管理、标记管理等)不被允许。

  2. 可以通过使用协议名称 pop3 或形式为 pop3://user:password@host:port/INBOX 的 URL 来通过 JavaMail API 访问 POP3 提供商。

  3. POP3 不支持永久标记。例如,Flags.Flag.RECENT 标记将永远不会对 POP3 消息设置。由应用程序确定 POP3 邮箱中的哪些消息是新消息。

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

  5. POP3 不提供收件日期,因此 getReceivedDate 方法将返回 null。

  6. 当访问 POP3 邮件的标头时,POP3 提供商使用 TOP 命令获取所有标头,然后将这些标头缓存起来。

  7. 当访问 POP3 消息的内容时,POP3 提供商使用 RETR 命令获取整个消息。

  8. POP3Message.invalidate 方法可用于在不关闭文件夹的情况下使缓存数据无效。

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

Name

Type

Description

mail.pop3.user

String

POP3 的默认用户名称。

mail.pop3.host

String

要连接到的 POP3 服务器。

mail.pop3.port

int

要连接到的 POP3 服务器端口(如果 connect() 方法未明确指定端口)。默认为 110。

mail.pop3.connectiontimeout

int

套接字连接超时值(以毫秒为单位)。默认为无限超时。

mail.pop3.timeout

int

套接字 I/O 超时值(以毫秒为单位)。默认为无限超时。

mail.pop3.rsetbeforequit

boolean

在发送 QUIT 命令之前关闭文件夹时,发送一个 POP3 RSET 命令。默认值为否。

mail.pop3.message.class

String

com.sun.mail.pop3.POP3Message 子类的类名。子类可以用来处理(例如)非标准的 Content-Type 头。子类必须有一个形式为 MyPOP3Message(Folder f, int msgno) throws MessagingException 的 public 构造函数。

mail.pop3.localaddress

String

创建 POP3 套接字时要绑定的本地地址(主机名)。默认为 Socket 类选择的地址。

mail.pop3.localport

int

创建 POP3 套接字时要绑定的本地端口号。默认为 Socket 类选择的端口号。

mail.pop3.apop.enable

boolean

如果设置为 true,则在登录到 POP3 服务器时使用 APOP 而不是 USER/PASS,只要 POP3 服务器支持 APOP。APOP 发送的是密码摘要,而不是明文密码。默认为否。

mail.pop3.socketFactory

Socket Factory

如果设置为实现了 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”协议,默认为否;对于“pop3s”协议,默认为真。

mail.pop3.ssl.checkserveridentity

boolean

如果设置为 true,则根据 RFC 2595 检查服务器标识。默认值为 false。

mail.pop3.ssl.trust

String

如果已设置,并且没有指定套接字工厂,则启用 MailSSLSocketFactory。如果设置为“*”,则信任所有主机。如果设置为用空格分隔的主机列表,则信任那些主机。否则,信任取决于服务器提供的证书。

mail.pop3.ssl.socketFactory

SSL Socket Factory

如果设置为扩展了 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 保护的连接。默认为否。

mail.pop3.starttls.required

boolean

如果为 true,则要求使用 STLS 命令。如果服务器不支持 STLS 命令,或者命令失败,则 connect 方法将失败。默认为否。

mail.pop3.socks.host

string

指定将用于连接到邮件服务器的 SOCKS5 代理服务器的主机名。

mail.pop3.socks.port

string

指定 SOCKS5 代理服务器的端口号。

mail.pop3.disabletop

boolean

如果设置为 true,则不会使用 POP3 TOP 命令获取邮件头。默认为否。

mail.pop3.forgettopheaders

boolean

如果设置为 true,则使用 POP3 TOP 命令可能检索到的头将被遗忘并由 POP3 RETR 命令作为一部分检索到的头取代。默认为否。

mail.pop3.filecache.enable

boolean

如果设置为 true,则 POP3 提供程序将把邮件数据缓存在临时文件中,而不是在内存中。只有在访问邮件内容时,才会将邮件添加到缓存。邮件头始终缓存在内存中(按需)。文件夹关闭或 JVM 终止时,文件缓存将被移除。默认为否。

mail.pop3.filecache.dir

String

如果启用了文件缓存,此属性可用来覆盖 JDK 用于临时文件的默认目录。

mail.pop3.cachewriteto

boolean

控制 POP3 邮件对象上的 writeTo 方法的行为。如果设置为 true,并且邮件内容尚未缓存,并且 ignoreList 为 null,则在写入邮件之前,先对该邮件进行缓存。否则,邮件将直接流到输出流中,而不进行缓存。默认为否。

mail.pop3.keepmessagecontent

boolean

如果将此属性设置为 true,则会保留对缓存内容的强引用,从而防止内存被再次使用,直到文件夹关闭或缓存内容显式失效(使用 invalidate 方法)。默认情况下为 false。

通常,应用不应直接使用此包中的类。相反,它们应使用 javax.mail 包(和子包)定义的 API。应用程序永远不应直接构建 POP3Store 或 POP3Folder 实例。相反,它们应使用会话方法 getStore 来获取适当的 Store 对象,并从中获取文件夹对象。

在章节 Checking Emails 中展示了使用 POP3 服务器的示例。