我想创建一个应用程序,使用imap从电子邮件帐户获取所有电子邮件。 当我第一次运行应用程序时,我得到所有邮件,而不是再次运行它我想标记之前读取的消息,因此我只能收到新消息。
我发现Message Object包含Flags(系统标志和用户定义的标志),但我无法设置一个用户定义的标志。
可以在电子邮件帐户上标记我的应用程序收到的消息,或者我必须保留所有消息ID,每次当我从imap收到消息时,我必须将他们的id与保留的ID进行比较并且仅获取具有不同ID的消息?
答案 0 :(得分:6)
某些IMAP服务器不允许您设置用户定义的标志。但大多数人都这样做。通过JavaMail,您将执行以下操作:
Flags flags = new Flags("fetched");
message.setFlags(flags, true);
然而,这些标志不是永久性的 - 另一个IMAP客户端可以像设置它们一样轻松地清除它们。 (虽然他们可能不会。)
另一种选择是跟踪您看到的消息的UID。您可以通过ImapFolder.getUID(Message)
获取它们。它比跟踪Message-ID标题要简单得多,因为它们是字符串,因此在应用程序中占用更多内存。
另一个选择是使用POP并跟踪UIDL
s。
答案 1 :(得分:0)
是的,可以将消息标记为已读,当您下次要阅读消息时,您只能阅读新消息。
使用以下代码:
Folder emailFolder = emailStore.getFolder("INBOX");
Message messages[] = emailFolder.search(new FlagTerm(new Flags(Flag.SEEN), false));
System.out.println("no of messages=" + messages.length);
for (int i = 0; i < messages.length; i++) {
Message message = messages[i];
//here write your code to read the message and whatever you wanna do//
//now at the end of the message(remember at the end of the message u read using code) write the following code//
message.setFlag(Flag.SEEN, true);
}//end of for loop