繁体   English   中英

如何使用 IMAP 唯一标识 Java 邮件消息?

[英]How do I uniquely identify a Java Mail Message using IMAP?

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 但这次它会更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM