JavaMail获取发送后邮件的Uid

Uid是一封邮件的唯一标识,我们在使用IMAP协议获取一封邮件时一般会这样写:
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);

那么我们发邮件时怎么获取到这个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);
//设置发送已读
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即可,一般都是一次发送一个邮件,数组取0个索引即可

有帮助点个小红心哦

你可能感兴趣的:(JavaMail获取发送后邮件的Uid)