如何使用 MailKit ImapClient 在邮件处于空闲状态时读取邮件

本文关键字:于空闲 状态 读取 何使用 ImapClient MailKit | 更新日期: 2023-09-27 18:32:20

我正在使用IdleAsync来接收有关新电子邮件的通知。

我希望在新消息到达时收到通知,然后阅读该消息,

但是当我尝试阅读该消息时,我收到异常,指出ImapClient处于空闲状态。

我是否需要创建另一个ImapClient或者我们可以使用相同的客户端来读取消息而不停止接收新消息的通知?

如何使用 MailKit ImapClient 在邮件处于空闲状态时读取邮件

正如Nameless One所指出的,MailKit的Idle()和IdleAsync()方法采用"done"CancelToken,可用于结束IDLE状态(当您取消"done"令牌时,它将发送DONE命令从而结束IDLE状态)。

完成此操作后,您可以获取消息并照常继续。

另一种选择,有些人这样做,是有2个ImapClients - 一个用于Idle(),另一个用于获取消息。

在空闲状态下,您唯一可以发送的命令是 DONE,它终止 IDLE。 如果您不介意轮询,您可以考虑使用 CONDSTORE 并使用 HIGHESTMODSEQ 检测新消息。

Rick Sanders 是对的,您需要发送DONE响应(请参阅 RFC2177 了解 IMAP IDLEDONE的工作原理)。

虽然我不熟悉 mailkit 或取消,但看起来 Idle 方法接受一个CancellationToken您可以通过在其CancellationTokenSource上调用 Cancel() 来取消。然后,这应该根据需要发送DONE命令。