1

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

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

4

1 回答 1

2

您需要做的是存储 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(s) 的消息。

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

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

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

于 2015-03-26T03:28:03.610 回答