6

IMAP サーバーに接続して新しいメールをリッスンするサービス (ま​​たはコンソール) アプリを作成する必要があります。私は現在 MailKit を使用しようとしていますが、ドキュメントからこれを達成する方法を理解するのに苦労しています。

私が最も近いのはこの投稿からです。私が見る限り、この投稿は接続を IDLE モードに設定し、時々 NoOP を送信して接続を維持しようとしています。私には完全に明確ではないのは、新着メール通知を受け取る方法です。

MailKit のドキュメントには、利用可能な Alert イベントがあることが示されているようです。私はそれにフックしようとしましたが、何も修正されていないようです。

これが私が試したことです:

    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