Uid是一封郵件的唯一標(biāo)識喊括,我們在使用IMAP協(xié)議獲取一封郵件時一般會這樣寫:
Session session =generSession();
URLName urln = new URLName("imap", mailHost,Integer.valueOf(mailPort), null, "333", "213");
IMAPStore store = (IMAPStore) session.getStore(urln);
store.connect();
IMAPFolder inbox = (IMAPFolder) store.getFolder("INBOX");
inbox.open(Folder.READ_WRITE);
Message message = inbox.getMessageByUID(183);
那么我們發(fā)郵件時怎么獲取到這個Uid呢?
Transport transport = session.getTransport("smtp");
transport.connect(mailHost, senderMail, password);
transport.sendMessage(mimeMessage, InternetAddress.parse(MailService.senderMail));
sendMessage是一個void方法
通過閱讀JavaMail的官方文檔我們能找到答案:
官方文檔地址:
https://javaee.github.io/javamail/docs/api/
image.png
這個方法是將新消息同步到郵箱的一個文件夾,也就是同步之后我們才能拿到Uid
的返回值是AppendUID[]類型
IMAPFolder sentBox = (IMAPFolder) store.getFolder(ExChangeConstant.FolderType.SentMessages);
//設(shè)置發(fā)送已讀
newMessage.setFlag(Flags.Flag.SEEN,true);
sentBox.open(Folder.READ_WRITE);
AppendUID[] appendUIDS = sentBox.appendUIDMessages(new MimeMessage[]{newMessage});
if(appendUIDS !=null && appendUIDS.length>0)
{
return appendUIDS[0].uid;
}else
{
return null;
}
將新的消息放回到返回Uid即可,一般都是一次發(fā)送一個郵件风宁,數(shù)組取0個索引即可