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. |
在上面此提供程序这部分中需要注意一些要点:
-
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 会话对象中设置。属性始终以字符串形式设置;类型列描述了字符串的解释方式。
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 服务器的示例。