我IdleAsync
用来接收有关新电子邮件的通知。
我想在有新消息到达时收到通知,然后阅读该消息,但是当我尝试阅读该消息时,我收到一个ImapClient
处于空闲状态的异常。
我是否需要创建另一个ImapClient
,或者我们可以使用同一个客户端来阅读消息而不停止接收新消息的通知?
正如 Nameless One 所指出的,MailKit 的 Idle() 和 IdleAsync() 方法采用“done” CancellationToken 可用于结束 IDLE 状态(当您取消“done”令牌时,它将发送 DONE 命令从而结束 IDLE状态)。
完成此操作后,您可以获取消息并照常继续。
一些人做的另一种选择是拥有 2 个 ImapClients - 一个用于 Idle(),另一个用于获取消息。
在 IDLE 状态下,您可以发送的唯一命令是 DONE,它会终止 IDLE。如果您不介意轮询,您可以考虑使用 CONDSTORE 并使用 HIGHESTMODSEQ 检测新消息。
Rick Sanders 是对的,您需要发送DONE
响应(请参阅RFC2177了解 IMAPIDLE
和DONE
工作方式)。
尽管我对 mailkit 或Cancellation不熟悉,但看起来Idle方法接受 a CancellationToken
您可以通过调用它来取消Cancel()
它CancellationTokenSource
。然后,这应该根据需要发送DONE
命令。