当我在收件箱中收到新邮件时如何收到通知(使用 IMAP 和 C#)?

How to get notification when I'm getting a new message in my inbox(using IMAP and C#)?

我有一个代码可以将收到的消息读取到邮件中,但我想创建一个触发器,以便在收到某些消息时发生某些操作。例如,您可以简单地创建一个控制台应用程序,触发器将为 Console.WriteLine("New message");

当然,理想情况下,也是阅读此消息,但我以后已经可以自己阅读了。我不知道如何实现通知。

我将添加我工作的代码,但在这种情况下,它似乎没有帮助。我是 Imap 的新手。如果有任何帮助和建议,我将不胜感激。

static void GetItems()
{
    ExchangeService service;
    String pattern = "file:///C:/Users/";
    service = new ExchangeService
    {
        Credentials = new WebCredentials("mail", "password")
    };
    FolderView view = new
    FolderView(10);

view.PropertySet = new PropertySet(BasePropertySet.IdOnly);
view.PropertySet.Add(FolderSchema.DisplayName);


service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");

SearchFilter searchFilter = new SearchFilter.IsGreaterThan(FolderSchema.TotalCount, 0);
view.Traversal = FolderTraversal.Deep;
FindFoldersResults findFolderResults = service.FindFolders(WellKnownFolderName.Inbox, searchFilter, view);

foreach (Folder f in findFolderResults)
{
    Console.WriteLine("Handling folder: " + f.DisplayName);

    SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, true));
    ItemView view1 = new ItemView(1);

    FindItemsResults<Item> findEmailResults = service.FindItems(f.Id, sf, view1);
    foreach (Item i in findEmailResults)
    {
        Console.WriteLine("Processing email: " + i.Subject);

    }
}

}

我建议改用 Graph API 而不是 EWS,Use the Microsoft Graph API to get change notifications

EWS 支持通知。它允许推送、拉取和流式传输通知,任何在您的特定情况下有意义的内容。

Notification subscriptions, mailbox events, and EWS in Exchange 开始。

所以,我对这个 mail-notification 系统进行了自己的研究,并找到了一篇非常好的文章和代码。

这是文章: MailKit : Obtaining new mail notification from IMAP server

这是 mail-notification 的代码: https://github.com/jstedfast/MailKit/blob/6c813d02617edc3e3de5481a413b1e2fb43bfe8c/samples/ImapIdle/ImapIdle/Program.cs

一切正常,我已经用过了。您只需要下载一些库。