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

时间:2014-11-27 16:23:10

标签: c# .net imap mime mailkit

我使用IdleAsync收到有关新电子邮件的通知。

我想在收到新邮件时收到通知然后阅读邮件,但是当我尝试阅读邮件时,我收到ImapClient处于空闲状态的异常。

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

Rick Sanders是对的,你需要发送DONE回复(有关IMAP IDLEDONE如何工作,请参阅RFC2177。)

虽然我不熟悉mailkit或CancellationIdle方法似乎接受CancellationToken,您可以通过调用Cancel() CancellationTokenSource取消DONE }}。然后,应该根据需要发送{{1}}命令。

答案 2 :(得分:2)

正如Nameless One所指出的那样,MailKit的Idle()和IdleAsync()方法需要完成"完成" CancellationToken,可用于结束IDLE状态(当你取消"完成"令牌时,它将发送DONE命令,从而结束IDLE状态。)

完成后,您可以抓取消息并继续正常播放。

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