如何使用javax Mail Api标记java应用程序接收的消息?

时间:2010-07-30 14:48:03

标签: java javax.mail

我想创建一个应用程序,使用imap从电子邮件帐户获取所有电子邮件。 当我第一次运行应用程序时,我得到所有邮件,而不是再次运行它我想标记之前读取的消息,因此我只能收到新消息。

我发现Message Object包含Flags(系统标志和用户定义的标志),但我无法设置一个用户定义的标志。

可以在电子邮件帐户上标记我的应用程序收到的消息,或者我必须保留所有消息ID,每次当我从imap收到消息时,我必须将他们的id与保留的ID进行比较并且仅获取具有不同ID的消息?

2 个答案:

答案 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