查看邮件数、新邮件和未读邮件
想知道邮箱中共有多少邮件、有多少邮件读过和有多少邮件没有读过。
Folder对象提供了三个方法。
GetMessageCount方法显示邮箱中总共有多少封信;
getNewMessageCount显示邮箱中新邮件的封数;
getUnreadMessageCount显示邮箱中未读邮件的封数。
注意:对于POP3协议,只支持GetMessageCount查询邮件总数。不支持判断邮件的未读和新邮件标记,只有自己进行判断操作了。
由于pop3协议不支持对已读未读邮件的标记,因此,要判断一封pop邮箱中的邮件是否是新邮件必须与邮件客户端联合起来才能做到。其原理是,每个服务器都会给每封邮件产生一个唯一的uid,客户端把读到的uid与本地保存的uid比较,如果本地没有这个uid,则这封邮件是新的,否则就是旧邮件。一般的邮件客户端,如 outlook express、foxmail等,都是用这种方法实现的。大约步骤如下:
- 客户端读取邮箱里所有邮件的 uid 列表(通过命令 UIDL 可以查看);
- 把uid列表与本地保存的uid列表相比较;
- 如果本地已存在,则比较下一个邮件uid;
- 如果本地不存在此uid,则下载此邮件,并保存此邮件的uid在本地;
URLName url = new URLName("pop3", host, port, "", user, password); Session session = Session.getInstance(System.getProperties(),null); Store store = session.getStore(url); POP3Folder inbox = null; try { store.connect(); inbox = (POP3Folder) store.getFolder("INBOX"); inbox.open(Folder.READ_ONLY); FetchProfile profile = new FetchProfile(); profile.add(UIDFolder.FetchProfileItem.UID); Message[] messages = inbox.getMessages(); inbox.fetch(messages, profile); for (int i = 0; i < messages.length; i++) System.out.println(inbox.getUID(messages[i])); } finally { try{ inbox.close(false); }catch(Exception e){} try{ store.close(); }catch(Exception e){} }
javamail只接收新邮件的方法(邮件的UID与MessageID是有区别的)
这篇也可以瞄瞄