我正在使用JODD邮件库阅读和处理从IMAP收到的电子邮件。 API非常好,但我遇到了一个逻辑问题。我使用的代码如下:
EmailFilter filter= new EmailFilter();
filter.flag(Flags.Flag.SEEN, false);
session.receiveEmailAndMarkSeen(filter);
通过致电session.receiveEmailAndMarkSeen
我收到所有未读电子邮件,这些电子邮件会立即标记为已读。现在,由于任何原因我的代码处理失败,并且我再次尝试接收电子邮件,所有这些未处理的电子邮件都已标记为已读并且不再下载。我宁愿下载电子邮件并将其标记为单独阅读,因为已成功处理。
所以我尝试使用session.receiveEmail
接收它们但不确定如何在处理时将它们标记为已读?有什么提示怎么办?我可以看到电子邮件对象有标记'属性我可以设置,但不知道如何将此信息发送回服务器。
答案 0 :(得分:0)
总结可能的解决方案:
使用Seen
标记重新获取电子邮件。缺点是再次提取电子邮件。
您撰写的内容 - 使用Session
和Folder
。
最后 - 从Jodd的下一个版本开始,你将拥有方法updateEmailFlags
,它可以让你选择只调用它:
mymail.flags(newFlags); ReceiveMailSession.updateEmailFlags(mymail);
结果将是相同的。
答案 1 :(得分:0)
已解决:我正在使用常见的JAVA邮件类 - 会话和存储创建连接。
Session sess = Session.getDefaultInstance(props, null);
Store store = sess.getStore("imaps");
store.connect("imapServerHost", "username","password");
...然后我创建文件夹对象(指向收件箱)
Folder folder = store.getFolder(this.imapFolder);
folder.open(Folder.READ_WRITE);
...然后我会收到使用会话和商店的电子邮件
ReceiveMailSession session=new ReceiveMailSession(sess, store);
...在处理完电子邮件后,我使用文件夹对象发回SEEN = true消息。
Flags f=new Flags();
f.add(Flags.Flag.SEEN);
folder.setFlags(new int[] {email.getMessageNumber()}, f,true);