Java Mail 中的 IMAP 消息由它的相对位置编号标识,该编号从 1 开始。
参考, http ://docs.oracle.com/javaee/1.4/api/javax/mail/Message.html#getMessageNumber ()
消息编号是一个临时的详细信息。
有没有办法永久唯一地标识通过 IMAP 访问邮箱的邮件/消息,使用 Java 邮件 API 在会话中成立?
Java Mail 中的 IMAP 消息由它的相对位置编号标识,该编号从 1 开始。
参考, http ://docs.oracle.com/javaee/1.4/api/javax/mail/Message.html#getMessageNumber ()
消息编号是一个临时的详细信息。
有没有办法永久唯一地标识通过 IMAP 访问邮箱的邮件/消息,使用 Java 邮件 API 在会话中成立?
查看 UIDFolder 接口,它公开了 IMAP UID 功能。
您可以使用以下代码作为示例获取消息的唯一标识符
Folder folder = imapStore.getFolder("INBOX"); // get reference for inbox folder
UIDFolder uf = (UIDFolder)folder; // cast folder to UIDFolder interface
folder.open(Folder.READ_ONLY); // open folder
Message messages[] = folder.getMessages(); // get all messages
Long messageId = uf.getUID(messages[0]); // get message Id of first message in the inbox
添加这个是因为我认为这会有所帮助
如果您想遍历消息并获取 uid,则上面的代码不会获得性能,因为您必须循环并获取 uid,使用消息获取它的简单方法如下
Folder emailFolder = store.getFolder("INBOX");
emailFolder.open(Folder.READ_ONLY);
UIDFolder uf = (UIDFolder)emailFolder;
Message messages[] = emailFolder.getMessages();
FetchProfile profile = new FetchProfile();
//profile.add(FetchProfile.Item.ENVELOPE);
profile.add(FetchProfile.Item.FLAGS);
//profile.add(FetchProfile.Item.CONTENT_INFO);
profile.add(UIDFolder.FetchProfileItem.UID);
emailFolder.fetch(messages, profile);
这将获取带有 uid 的消息
在此之后,如果您循环并执行 uf.getUID(messages[i]); 您将获得 uid,但这次会更快。