如何使用IMAP唯一地标识Java邮件消息?
Java Mail中的IMAP消息由它的相对位置号(从1开始)标识 参考, () 消息编号是一个临时详细信息如何使用IMAP唯一地标识Java邮件消息?,java,email,jakarta-mail,Java,Email,Jakarta Mail,Java Mail中的IMAP消息由它的相对位置号(从1开始)标识 参考, () 消息编号是一个临时详细信息 是否有一种方法可以永久唯一地标识通过IMAP访问邮箱的邮件/消息,该邮件/消息使用Java mail API跨会话运行?查看UIDFolder接口,该接口公开了IMAP UID功能。您可以使用以下代码作为示例来获取邮件的唯一标识符 Folder folder = imapStore.getFolder("INBOX"); // get reference for inbox folder
是否有一种方法可以永久唯一地标识通过IMAP访问邮箱的邮件/消息,该邮件/消息使用Java mail 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,但这次会更快。如何“获取”该uid接口的具体实现?代码示例将使您的答案完整且可接受:)UIDFolder uf=(UIDFolder)文件夹;IMAP提供程序返回的所有文件夹对象都实现UIDFolder interface.No。有关详细信息,请阅读IMAP RFC。您还需要考虑UID有效性。UID不在消息标题中。UID是由IMAP服务器管理的元数据。