需求:根据邮件头UID,设置邮件状态为已读。
ps:如何在发送邮件后获取UID,参考我之前的一片博文:springboot发送邮件,包含附件、图片
/**
* 将邮件设置为已读
* @param uids 操作邮件UID集合
* @throws Exception
*/
public void setEmailRead(long[] uids) throws Exception {
String email = "1234@qq.com";
String password = "xxxxpassword";
Properties prop = this.initProp();
Session session = Session.getInstance(prop);
IMAPStore store = (IMAPStore) session.getStore("imap");
store.connect(email, password);
//此为获取收件箱
IMAPFolder folder = (IMAPFolder) store.getFolder("INBOX");
folder.open(Folder.READ_WRITE);
Message[] messages = folder.getMessagesByUID(uids);
for(Message message : messages){
if(message != null){
Flags flags = message.getFlags();
if (!flags.contains(Flags.Flag.SEEN)) {
//设置为已读
message.setFlag(Flags.Flag.SEEN, true);
}
}
}
// 释放资源
if (folder != null){
folder.close(true);
}
if (store != null) {
store.close();
}
}
public Properties initProp(){
//host和port,需要根据不同的邮件服务器进行设置,下例为Gmail
Properties prop = System.getProperties();
prop.put("mail.store.protocol", "imap");
prop.put("mail.imap.host", "imap.gmail.com");
prop.put("mail.imap.port", 993);
prop.put("mail.imap.socketFactory.port", 993);
prop.put("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
prop.put("mail.imap.socketFactory.fallback", "false");
prop.put("mail.imap.auth", "true");
return prop;
}