http://lqixv.iteye.com/blog/563247
由于pop3协议不支持对已读未读邮件的标记,因此,要判断一封pop邮箱中的邮件是否是新邮件必须与邮件客户端联合起来才能做到。其原理是,每个服务器都会给每封邮件产生一个唯一的uid,客户端把读到的uid与本地保存的uid比较,如果本地没有这个uid,则这封邮件是新的,否则就是旧邮件。一般的邮件客户端,如 outlook express、foxmail等,都是用这种方法实现的。大约步骤如下:
- 客户端读取邮箱里所有邮件的 uid 列表(通过命令 UIDL 可以查看);
- 把uid列表与本地保存的uid列表相比较;
- 如果本地已存在,则比较下一个邮件uid;
- 如果本地不存在此uid,则下载此邮件,并保存此邮件的uid在本地;
大致的java代码实现如下:
- 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){}
- }