MailKit:从IMAP服务器获取新邮件通知

本文关键字:获取 新邮件 通知 服务器 IMAP MailKit | 更新日期: 2023-09-27 18:26:27

我需要创建一个连接到IMAP服务器并侦听新邮件的服务(或控制台)应用程序。我目前正在尝试使用MailKit,但在从文档中找出如何实现这一点时遇到了困难。

我最近的一次是来自这篇帖子。据我所见,这篇文章将连接设置为IDLE模式,并偶尔发送NoOP来尝试保持连接的有效性。我不完全清楚的是如何接收新邮件通知。

MailKit文档似乎表明存在可用的警报事件。我试着去了解一下,但这似乎并不能解决任何问题。

以下是我尝试过的:

    var cts = new CancellationTokenSource();
    testIDLEMailNotification(cts.Token);
    ...
    private static void testIDLEMailNotification(CancellationToken token)
    {
        using (var client = ClientCreateAndConnect(token))
        {
            while(!token.IsCancellationRequested)
            {
                using (var done = new CancellationTokenSource())
                {
                    using (var timer = new System.Timers.Timer(9 * 60 * 1000))
                    {
                        timer.Elapsed += (sender, e) => done.Cancel();
                        timer.AutoReset = false;
                        timer.Enabled = true;
                        try
                        {
                            client.Idle(done.Token, token);
                            client.NoOp(token);
                        }
                        catch (OperationCanceledException)
                        {
                            break;
                        }
                    }
                }
            }
        }
    }
    private static ImapClient ClientCreateAndConnect(CancellationToken token)
    {
        var client = new ImapClient();
        client.Connect("server.domain", 993, true, token);
        client.AuthenticationMechanisms.Remove("XOAUTH");
        client.Authenticate("mailbox@server.domain", "password",token);
        client.Inbox.Open(MailKit.FolderAccess.ReadWrite, token);
        client.Alert += client_Alert;
        return client;
    }
    static void client_Alert(object sender, AlertEventArgs e)
    {
        Console.WriteLine("New Email or something.");
    }

MailKit:从IMAP服务器获取新邮件通知

我在这里找到了一个示例。我一直在IMAPClient上查找某种事件,但没有任何与消息通知有关的事件。

然而,正如示例所示,这些事件属于IMAPFolder类。。。现在我想起来,这是有道理的。

希望这能帮助其他人。

由于您实际上是在尝试编写IMAP客户端,因此必须读取几个RFC。特别是,RFC3501会告诉你什么是ALERT,以及你应该如何处理它

很抱歉,请选择另一个为您提供高级界面的库,或者学习如何使用IMAP。