MailKit/IMAP/QRESYNC:正在更新缓存的 HighestModSeq?

MailKit/IMAP/QRESYNC: Updating cached HighestModSeq?

以下答案提供了使用 MailKit 在消息同步实现中利用 QRESYNC 的出色路线图:

MailKit IMAP fetch only new, not downloaded messages

但是,它不包括使用更新的 HighestModSeq 值更新本地缓存。具体来说,新的值是如何得到的呢?什么时候获取比较合适?我假设它会在任何 MessagesVanished、CountChanged 或 MessageFlagsChanged 事件触发后发生变化。对这一点的任何澄清将不胜感激。

However, it does not cover the updating of the local cache with an updated HighestModSeq value. Specifically, how is the new value obtained?

Open() 文件夹后(无论您使用哪种重载),ImapFolder.HighestModSeq 属性 将被设置。

When is the appropriate time to obtain it?

在您与服务器重新同步之前,我可能不会在打开文件夹后立即在缓存中设置值。不过,一旦您完成了该操作,我就会更新缓存值并尝试保持更新。

I assume it is expected to change after any MessagesVanished, CountChanged, or MessageFlagsChanged event fires.

有一个 folder.HighestModSeqChanged 事件可以监听。在以下情况下会发出此事件:

  1. 服务器发送了一个 HIGHESTMODSEQ 响应代码(表示该值已更改)
  2. 用户调用了 Fetch() 重载之一,并且在 FETCH 响应中遇到大于文件夹当前 HighestModSeq 值的 MODSEQ 值。

我已经更新了另一个答案以添加用于更新缓存的 HighestModSeq 以及 UidValidity 值的逻辑。