1

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

我想在有新消息到达时收到通知,然后阅读该消息,但是当我尝试阅读该消息时,我收到一个ImapClient处于空闲状态的异常。

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

4

3 回答 3

3

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

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

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

于 2014-11-28T14:05:16.053 回答
2

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

于 2014-11-27T17:27:25.620 回答
2

Rick Sanders 是对的,您需要发送DONE响应(请参阅RFC2177了解 IMAPIDLEDONE工作方式)。

尽管我对 mailkit 或Cancellation不熟悉,但看起来Idle方法接受 a CancellationToken您可以通过调用它来取消Cancel()CancellationTokenSource。然后,这应该根据需要发送DONE命令。

于 2014-11-28T07:56:43.390 回答