A、原理
接收邮件可以应用协议 (POP3或 IMAP)。
A.1、接收邮件过程
参考下面例子中
showMessages()
1.Store(Javax.mail.Store)
接收邮件和发送邮件很类似都要用到 Session。但是在获得 Session 后,我们需要从 Session
中获取特定类型的 Store,然后连接到 Store,这里的 Store 代表了存储邮件的邮件服务器。
在连接 Store 的过程中,极有可能需要用到用户名、密码或者 Authenticator 。
Store store = session.getStore("imap");
Store store = session.getStore("pop3");
store.connect(host, username, password);
2.Folder(Javax.mail.Folder)
在连接到 Store 后,一个 Folder 对象即目录对象将通过 Store 的 getFolder() 方法被返回,我
们可从这个 Folder 中读取邮件信息:
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
上面的例子首先从 Store 中获得 INBOX 这个 Folder(对于 POP3协议只有一个名为 INBOX 的
Folder 有效),然后以只读( Folder.READ_ONLY)的方式打开 Folder,
注意: 对于 POP3协议只有一个名为 INBOX的 Folder 有效,而对于 IMAP 协议,我们可以访
问多个 Folder。
3.Message (Javax.mail.Message)
最后调用 Folder 的 getMessages()方法得到目录中所有 Message 的数组。
Message message[] = folder.getMessages();
Folder 的 getMessages()方法时采取了很智能的方式: 首先接收新邮件列表, 然后再需要的时
候(比如读取邮件内容) 才从邮件服务器读取邮件内容。 在读取邮件时, 我们可以用 Message
类的 getContent() 方法接收邮件或是 writeTo() 方法将邮件保存, getContent() 方法只接收邮件
内容(不包含邮件头) ,而 writeTo()方法将包括邮件头。
((MimeMessage)message).getContent();
4.关闭连接
在读取邮件内容后,别忘记了关闭 Folder 和 Store。
folder.close(Boolean);
store.close();
传递给 Folder.close()方法的 boolean 类型参数表示是否在删除操作邮件后更新 Folder。
A.2、查看邮件数、新邮件和未读邮件
参考下面例子中
showFolderInfo()
想知道邮箱中共有多少邮件、有多少邮件读过和有多少邮件没有读过。
Folder 对 象 提 供 了 三 个 方 法 。 GetMessageCount 方 法 显 示 邮 箱 中 总 共 有 多 少 封 信 ,
getNewMessageCount 显示邮箱中新邮件的封数, getUnreadMessageCount 显示邮箱中未读邮
件的封数。
注意: 对于 POP3协议,只支持 GetMessageCount 查询邮件总数。不支持判断邮件的未读和
新邮件标记,只有自己进行判断操作了。
A.3、消息标识(删除邮件)
消息的删除涉及使用与消息相关的 Flags(标志)。不同 flag 对应不同的状态,有些由系统
定义而有些则由用户定义。下面列出在内部类 Flags.Flag 中预定义的标志: