同步。使用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,获取其他所有内容的标志。