同步。使用imap java的电子邮件

同步。使用imap java的电子邮件,java,email,jakarta-mail,imap,sync,Java,Email,Jakarta Mail,Imap,Sync,我已经编写了一个代码,下载所有邮件并存储它们,但是现在我想同步邮件。也就是说,只下载那些以前没有下载的邮件。 注意:同步并不意味着只下载看不见的消息… 任何帮助或想法都将不胜感激。为此,您可以使用消息UID来检查消息…最大UID是消息的最新UID…同步基本上包括两部分: 1. 获取数据库中不存在的新邮件。为此,请存储上次下载的邮件的UID(具有最大值),并将以前的最大UID值的所有邮件下载到新UID值。 2.从数据库中删除已删除的邮件。为此,请检查缺少的UID值并将其删除。 虽然UID的值是特定

我已经编写了一个代码,下载所有邮件并存储它们,但是现在我想同步邮件。也就是说,只下载那些以前没有下载的邮件
注意:同步并不意味着只下载看不见的消息…

任何帮助或想法都将不胜感激。

为此,您可以使用消息UID来检查消息…最大UID是消息的最新UID…同步基本上包括两部分:
1. 获取数据库中不存在的新邮件。为此,请存储上次下载的邮件的UID(具有最大值),并将以前的最大UID值的所有邮件下载到新UID值。
2.从数据库中删除已删除的邮件。为此,请检查缺少的UID值并将其删除。
虽然UID的值是特定于文件夹的,并且可能会因特定的消息而更改,但现在这种情况很少发生,您可以通过UIDvalidity来检查这一点。
如果您使用的是java,那么有一些函数称为getUID()getuidvality()
链接:
RFC4549说明了需要如何进行同步。
链接:

但是现在我想同步邮件

同步是指邮箱中的任何新邮件以及对现有邮件的修改。修改可以是更改标志,甚至删除

如果IMAP存储区支持IDLE命令,则可以对特定文件夹发出IDLE命令,并侦听对该邮箱的任何更改

由于无法对所有文件夹发出IDLE命令,因此可以为文件夹保留HIGHESTMODSEQ和LAST_UID值(如果IMAP存储支持CONDSTORE),并使用uidfetchChangedSince方法查找自LAST_UID和HIGHESTMODSEQ以来文件夹中的更改

从它的文件来看

   /**
     * Get the sequence numbers for messages changed since the given
     * modseq and with UIDs ranging from start till end.
     * Also, prefetch the flags for the returned messages.
     *
     * @param   start   first UID
     * @param   end last UID
     * @param   modseq  the MODSEQ
     * @return      array of sequence numbers
     * @exception   ProtocolException   for protocol failures
     * @see "RFC 4551"
     * @since   JavaMail 1.5.1
     */
    public int[] uidfetchChangedSince(long start, long end, long modseq)
            throws ProtocolException

使用消息编号,您始终可以获得完整的消息。

研究IMAP协议,IMAP已看到/未看到标志。您还可以在下载邮件后删除邮件,或移动到其他文件夹使用UID,下载以前未见过的UID,删除服务器上不再存在的UID,获取其他所有内容的标志。