第一版是通过getMessages()获取所有邮件,遍历判断uuid,删除然后新增。
现在通过addMessageCountListener()监听草稿新增,获取邮件msgNum,通过getMessage()获得指定邮件。
代码如下:
String username = "邮箱";
String password = "授权码";
Properties properties = new Properties();
properties.put("mail.transport.protocol", "协议");
properties.put("mail.smtp.host", "地址");
properties.put("mail.smtp.port", "端口");
properties.setProperty("mail.smtp.auth", "true");
Session session = this.createSession(username, password, properties);
Store store = session.getStore("imap");
store.connect(host, username, password);
Folder drafts = store.getFolder("Drafts");
drafts.open(Folder.READ_WRITE);
if (StringUtils.isBlank(String.valueOf(mail.getMsgnum()))) {
drafts.addMessageCountListener(new MessageCountAdapter() {
@Override
public void messagesAdded(MessageCountEvent e) {
log.info("草稿保存监听");
int messageNumber = e.getMessages()[0].getMessageNumber();
mail.setMsgnum(messageNumber);
// 这里是修改数据库中对应邮件信息
// 可以改成插入数据 记录msgnum
mailMapper.updateById(mail);
}
});
}
drafts.getMessage(mail.getMsgnum()).setFlag(Flags.Flag.DELETED, true);
// 删除被标记为DELETED邮件
drafts.expunge();
MimeMessage message = this.createMessage(new MimeMessage(session), mail);
message.addHeader("uuid", mail.getId());
message.saveChanges();
message.setFlag(Flags.Flag.DRAFT, true);
MimeMessage[] msgArr = {message};
drafts.appendMessages(msgArr);
代码还有优化空间,先这样,能用就行(狗头)