找到 MessagesArrived 事件 MailKit 的新邮件

Find the new email of MessagesArrived event MailKit

如何使用 MailKit 获取触发 MessagesArrived 事件的新电子邮件?

在我看到之后,我得到了一个作为 IMailFolder 的发件人和一个作为 MessagesArrivedEventArgs 的 e。 我在 e 中看到的唯一东西是 e.Count,它告诉我我假设有多少新闻邮件到达了。我要的是已到的MimeMessage形式的邮件

您需要做的是存储 e.Count 值。当前命令完成后(client.Idle()?folder.Fetch()?等),您将需要:

  1. 调用 folder.Fetch (folder.Count - count, -1, MessageSummaryItems.UniqueId) 获取添加到文件夹的最新消息。

  2. 或调用 folder.Search (SearchQuery.Recent) 将只提供 您以前未查看过的消息。

获得 UID 后,您可以调用 folder.GetMessage (uid); 以获取消息作为 MimeMessage。

注意:从技术上讲,只要 IMAP 服务器向客户端发送一个 EXISTS 事件,其中文件夹中的邮件数量 增加了 ,就会发出 MessagesArrived 事件。由于 e.Count 值计算为 NewMessageCount - OldMessageCount,它实际上可能会产生误导,因为您可能会遇到以下情况:

  1. 打开文件夹,当前邮件数为 10
  2. 将邮件移出文件夹
  3. 在移动消息时,您收到 2 条新消息
  4. MessagesArrived 事件发出,计数为 1 (10 - 1 + 2 = 11... 11 - 10 = 1)

实际上最好是听取 ImapFolder.CountChanged 事件并自己记账。