利用javamail和POP3、SMPT协议实现邮件的收发(三)

2014-11-24 11:01:10 · 作者: · 浏览: 2
ing password, boolean isDelete) throws MessagingException {
Properties props = System.getProperties();
Authenticator auth = new POPAuthenticator(username, password);
Session session = Session.getInstance(props, auth);
session.setDebug(false);
Store store = session.getStore("POP3");
store.connect(server, port, username, password);
//获得收件箱
POP3Folder folder = (POP3Folder) store.getFolder("INBOX");
try {
//读写方式打开
folder.open(Folder.READ_WRITE);
} catch (MessagingException ex) {
//制度方式打开
folder.open(Folder.READ_ONLY);
}
// int totalMessages = folder.getMessageCount();
Message m_message = null;
Message[] msgs = folder.getMessages();
for (int i = 0; i < msgs.length; i++) {
m_message = msgs[i];
String UID = folder.getUID(m_message);
if (haveReceived(UID)) {
// 插入 数据库
// mailList.add(new RecvMailTask(m_message,
// p_st_attachmentParentDir, UID));
// 设置为已读,IMAP协议支持,POP3协议不支持该功能
m_message.setFlag(Flags.Flag.SEEN, true);
// POP3协议可以删除
m_message.setFlag(Flags.Flag.DELETED, isDelete);
}
}
}
/**
* POP3协议的对邮件的操作和服务器不同步,不能区分是否为已读邮件。 如果接收后不删除服务器上的邮件,下次仍然会接收该邮件。
* 服务器会给每一封邮件一个独一无二的UID,接收邮件时保存该UID到数据库,作为下次接收时是否已经接收过该邮件的依据。
* 有两种方式:(1)每次接收先从数据库中读取所有的UID,接收时判断是否包含当次接收邮件的UID。
* 优点是只读一次数据库,缺点是读出的UID数量可能会很多。
* (2)接收每一封邮件时,把其UID作为参数查询数据库,是否返回数据作为判断依据。
*
* @param UID
* @return
*/
private static boolean haveReceived(String UID) {
//个人觉得第一种较好,如果邮箱中邮件较多,接收又较为频繁,那么每次接收都会产生大量数据库连接次数。
//第一种注意把取得的UID集放入到Set集合中,用contains()方法直接判断
return true;
}