由于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){}
}
参考:
1、http://www.javayou.com/diary/390
2、http://topic.csdn.net/t/20010905/16/273295.html
分享到:
评论