6

我需要创建一个连接到 IMAP 服务器并侦听新邮件的服务(或控制台)应用程序。我目前正在尝试使用 MailKit,但在尝试从文档中弄清楚如何完成此操作时遇到了麻烦。

我最接近的就是从这里文章。据我所知,这篇文章将连接设置为空闲模式,并偶尔发送 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.");
    }
4

2 回答 2

7

我在这里找到了一个样本。我一直在 IMAPClient 上寻找某种事件,并且没有任何与消息通知特别相关的内容。

但是,如示例所示,事件位于 IMAPFolder 类中……现在我考虑一下,这很有意义。

希望这对其他人有帮助。

于 2014-10-15T13:09:13.643 回答
-7

由于您实际上是在尝试编写 IMAP 客户端,因此必须阅读几个 RFC。特别是,RFC3501 将告诉您 anALERT是什么以及您应该用它做什么。

抱歉,要么选择另一个为您提供更高级别界面的库,要么学习如何使用 IMAP。

于 2014-10-15T00:21:18.160 回答