gpt4 book ai didi

c# - 使用 Mailkit 获取收件箱更改通知

转载 作者:行者123 更新时间:2023-11-30 20:43:46 28 4
gpt4 key购买 nike

当使用 MailKit 我的邮箱的收件箱发生邮件或更改时,即时通知的最佳方式是什么?

我一直在玩弄以下事件:ImapClient.Inbox.CountChanged;这似乎在使用 Exchange 服务器时效果最好,因为它们对 MessageArrived 事件根本没有反应。噗……

ImapClient.Inbox.MessagesArrived;这似乎适用于开源邮件服务器,例如 SquirrelMail,但不适用于 Exchange。

我想在新邮件到达邮箱时收到通知,如果有任何邮件被移动/删除,以及是否有任何邮件移动到此 imap 文件夹。当我的收件箱发生问题时,我应该采取哪种方法尽快收到事件?我想要两全其美。

什么是 ImapClient.Inbox.Subscribe();用于??

最佳答案

SubscribeUnsubscribe 方法只是将文件夹(又名邮箱)标记为已订阅或未订阅 - 通常这仅由邮件客户端用来决定用户是否订阅想要查看默认文件夹列表中的文件夹。

CountChanged 事件在 MailKit 从 IMAP 服务器获得未标记的 "* # EXISTS" 行时发出,通常作为对命令的响应的一部分已发送。

MessagesArrived 事件在 CountChanged 事件之后立即发出,当且仅当新消息计数大于旧消息计数时。不幸的是,这是一个设计/命名很糟糕的事件,因为它可能会产生很大的误导。由于判断是否触发事件的逻辑只有有限的上下文(旧消息计数和新消息计数),因此无法准确判断是否触发该事件。

以下面的情况为例:

当您打开一个文件夹时,假设邮件数是 10。

现在您从文件夹中删除了一些消息(5 条?)...但是,在删除消息的同时,您收到了 2 条新消息。

当 expunge 命令完成时,IMAP 服务器回复 "* 7 EXISTS"

由于 7(新消息计数)小于 10(旧消息计数),MessagesArrived 事件不会被触发。

I want to be notified when new mails arrive to the mailbox, if any mails are moved/deleted, and if there any mails moved to this imap folder.

如果你想知道新消息何时到达,你需要监听 CountChanged 事件并做你自己的簿记以确定是否有新消息到达或者消息是否被移出/删除文件夹。

无法区分正在移动文件夹的邮件和正在传送到文件夹的新邮件(除非您正在移动)。

Which approach should I take to get an event asap when something happens to my INBOX??

如果您的服务器支持 IDLE 扩展,您可能需要研究使用 ImapClient.Idle()(或 IdleAsync())方法,因为 CountChanged 事件只会在它收到来自服务器的 "* # EXISTS" 响应时触发,而 IMAP 服务器只会将该响应作为命令响应的一部分发送来自客户端如果客户端处于空闲模式。

如果您的服务器不支持 IDLE 扩展,您将需要使用 ImapClient.NoOp() 方法(这是一个不执行任何操作的虚拟命令)“ping”IMAP 服务器) 定期检查自上次发送命令以来是否有任何新消息到达。

有一个 ImapIdle sample在 MailKit 的 GitHub 存储库中查看如何使用它。

关于c# - 使用 Mailkit 获取收件箱更改通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30102685/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com