使用IMAP邮寄:如何检测邮件是否已从一个文件夹移动到另一个文件夹?

时间:2013-04-28 17:37:01

标签: java imap javamail mailing

使用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发生变化,我不能用它来识别邮件。 我想我必须使用邮件信息,例如主题发送者接收日期,构建它们的哈希值,并比较每次登录时消息的哈希值。但这会导致性能问题。

2 个答案:

答案 0 :(得分:4)

你不能在IMAP中这样做。跟踪Message-Id标题可能会让你到一半,但是你必须为重复的消息ID添加各种检查(是的,它们假定是唯一的)等等另外请记住,IMAP为您提供的基准是单个邮箱的良好同步视图,而不是组合时一组邮箱的原子视图。这意味着即使用户在文件夹A和B之间“移动”了一条消息,在A和B中也可以很长时间地为您的脚本显示更长的时间段。

某些IMAP服务器添加了非标准字段,您可以FETCH包含消息有效内容的加密哈希。但这些仍然是非标准的。

答案 1 :(得分:2)

您可以尝试使用包含blablabla@mail.gmail.com等消息ID的rfc822-header信息,当邮件移入文件夹时不应更改。但是你必须抓取用户的所有邮件头来同步它,至少我不知道检索移动邮件的方法

相关问题