【发布时间】:2011-12-02 11:54:55
【问题描述】:
注意:在回答后添加: 谢谢..是的,我已经尝试将 Flag.SEEN 设置为 true 和 saveChanges.. 我还阅读了它读取的 getContent 标记。我尝试在循环消息的 for 语句中使用它。但是无论如何,在下一个循环中,我还是从文件夹中再次收到了消息。我假设该文件夹是活动的,所以抓取内容,然后再次从带有过滤器的文件夹中抓取消息以不被看到应该可以工作,但我仍然收到相同的消息。我可以尝试关闭文件夹并重新打开以测试它是否已标记。此外,如果我转到我的客户并单击该消息,那么我的代码即使在循环中也不会看到它,所以我希望在代码中做同样的事情。
原文: 我正在使用 javamail 从 gmail 帐户获取电子邮件,它工作得很好,当我收到我想将其标记为已读的消息时,任何人都可以给我一些指导吗?这是我当前的代码:
Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
try {
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", eUserName, ePassWord);
// Get folder
Folder folder = store.getFolder("INBOX");
if (folder == null || !folder.exists()) {
return null;
}
folder.open(Folder.READ_ONLY);
// Only pull unread
FlagTerm ft = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
Message messages[]; // = folder.search(ft);
for(int x = 0; x < timeOutInSeconds; x++) {
log.reportMessage("looking for emails");
try {
folder.getMessages();
messages = folder.search(ft);
if (messages.length > 0) {
for (Message message : messages) {
//log.reportMessage("found message: should not see again, marking read");
// want to mark as read
}
}
Thread.sleep(1000);
}
catch(Exception ex) {
}
}
// Close connection
folder.close(false);
store.close();
return null;
}
catch (NoSuchProviderException ex) {
return null;
}
catch (MessagingException ex) {
return null;
}
}
【问题讨论】:
标签: java jakarta-mail