与IMAP邮件:如何检测的消息已经从一个文件夹移动到另一个?(Mailing with IMAP:

2019-09-01 07:18发布

使用JavaMail API和IMAP,我想学习一个消息已经从一个文件夹移动到B。 我该怎么办,如果没有添加侦听? 我的意思是我希望当我登录到该帐户,并打开文件夹,发现消息的变化。

问题是,如果你有与IDS 1 2和3文件夹中的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个月前邮件,已被移动到另一个文件夹。

我的想法是,

因为的UID改变,我不能使用用于识别邮件。 我想我已经使用邮件的相关信息,例如主题发件人收到日期,创建它们的散列值和比较信息的哈希值在每次登录。 但它会导致性能问题。

Answer 1:

你可以这样做,在IMAP。 跟踪Message-Id头可能让你成功了一半,但你必须添加各种检查的拐角情况下,像重复消息ID(是的,他们都应该是唯一的)等。另外请记住,什么基线IMAP给你是公同步视图到一个邮箱,而不是在组合时上一组邮箱的原子图。 这意味着,即使用户具有“移动”的文件夹A和B之间的消息,它很可能是在A和B都可见你的脚本更长的时间。

有些IMAP服务器添加非标域,你可以FETCH包含消息有效载荷的加密哈希。 这些仍然是不规范的,虽然。



Answer 2:

你可以尝试使用它包含了一个消息ID喜欢blablabla@mail.gmail.com当邮件被移动到文件夹中不应改变RFC822报头信息。 但你会抓取用户的所有邮件头同步此,至少我不知道的方式来检索感动消息



文章来源: Mailing with IMAP: How to detect that a message has been moved from one folder to another?