使用JavaMail API和IMAP,我想知道消息已从文件夹a移动到b。如何在不增加听众的情况下做到这一点?我的意思是当我登录帐户并打开文件夹时,我想发现消息的变化。
问题是,如果您在文件夹a中有3条消息,其中包含ID 1 2和3,并且您将ID为3的消息移动到文件夹B,则消息的ID将更改,并且我们在文件夹B中有一条ID为1的消息
我的目标是将邮件服务器中的邮件结构与我自己的本地服务器同步。我必须自己保留所有消息信息,标志等。因此,在每次登录时,我必须发现对邮件服务器中存储的邮件所做的所有更改。
我可以通过以下方式获取新邮件或未读邮件:
Message messages[] = inbox.search(new FlagTerm(new Flags(Flag.RECENT), true));
或
Message messages[] = inbox.search(new FlagTerm(new Flags(Flag.SEEN), false));
但我对新邮件不感兴趣,我也想知道对旧邮件所做的更改,例如我想知道这些:
2个月前已阅读的邮件已移至另一个文件夹。
我的想法是,
因为uids发生变化,我不能用它来识别邮件。 我想我必须使用邮件信息,例如主题发送者接收日期,构建它们的哈希值,并比较每次登录时消息的哈希值。但这会导致性能问题。
答案 0 :(得分:4)
你不能在IMAP中这样做。跟踪Message-Id
标题可能会让你到一半,但是你必须为重复的消息ID添加各种检查(是的,它们假定是唯一的)等等另外请记住,IMAP为您提供的基准是单个邮箱的良好同步视图,而不是组合时一组邮箱的原子视图。这意味着即使用户在文件夹A和B之间“移动”了一条消息,在A和B中也可以很长时间地为您的脚本显示更长的时间段。
某些IMAP服务器添加了非标准字段,您可以FETCH
包含消息有效内容的加密哈希。但这些仍然是非标准的。
答案 1 :(得分:2)
您可以尝试使用包含blablabla@mail.gmail.com等消息ID的rfc822-header信息,当邮件移入文件夹时不应更改。但是你必须抓取用户的所有邮件头来同步它,至少我不知道检索移动邮件的方法