Uid是一封郵件的唯一標(biāo)識(shí),我們?cè)谑褂肐MAP協(xié)議獲取一封郵件時(shí)一般會(huì)這樣寫:
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ā)郵件時(shí)怎么獲取到這個(gè)Uid呢?
Transport transport = session.getTransport("smtp");
transport.connect(mailHost, senderMail, password);
transport.sendMessage(mimeMessage, InternetAddress.parse(MailService.senderMail));
sendMessage是一個(gè)void方法
通過閱讀JavaMail的官方文檔我們能找到答案:
官方文檔地址:
https://javaee.github.io/javamail/docs/api/

image.png
這個(gè)方法是將新消息同步到郵箱的一個(gè)文件夾,也就是同步之后我們才能拿到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ā)送一個(gè)郵件,數(shù)組取0個(gè)索引即可