7

Java Mail 中的 IMAP 消息由它的相对位置编号标识,该编号从 1 开始。

参考, http ://docs.oracle.com/javaee/1.4/api/javax/mail/Message.html#getMessageNumber ()

消息编号是一个临时的详细信息。

有没有办法永久唯一地标识通过 IMAP 访问邮箱的邮件/消息,使用 Java 邮件 API 在会话中成立?

4

3 回答 3

9

查看 UIDFolder 接口,它公开了 IMAP UID 功能。

于 2012-07-11T17:38:26.153 回答
9

您可以使用以下代码作为示例获取消息的唯一标识符

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
于 2014-06-04T12:56:22.400 回答
1

添加这个是因为我认为这会有所帮助

如果您想遍历消息并获取 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,但这次会更快。

于 2020-12-28T19:37:02.077 回答