مدیریت ایمیل ناهمزمان با کلاینت POP3

عملیات ناهمگام با Pop3Client

کار با پیام‌ها می‌تواند به‌صورت ناهمزمان با استفاده از Aspose.Email انجام شود Pop3Client. این مقاله نشان می‌دهد چگونه پیام‌ها را از یک صندوق ایمیل به‌صورت ناهمزمان بازیابی کنید. همچنین نشان می‌دهد چگونه با ارائه معیارهای جستجو با استفاده از MailQuery. به‌طور جداگانه نشان داده خواهد شد که چگونه یک عملیات با صندوق پستی که توسط الگوی ناهمزمان مبتنی بر کار (TAP) متد.

بازیابی پیام‌ها به صورت ناهمزمان

کد زیر نشان می‌دهد چگونه پیام‌ها را به صورت ناهمزمان بازیابی کنیم.

فهرست‌کردن پیام‌ها به‌صورت ناهمزمان با MailQuery

این MailQuery کلاس می‌تواند برای تعیین معیارهای جستجو جهت بازیابی فهرست پیام‌ها به‌صورت ناهمزمان استفاده شود همان‌طور که در نمونه کد زیر نشان داده شده است.

قطع یک متد TAP

.NET Framework 4.5 به بعد، می‌توانید از متدهای ناهمگام پیاده‌سازی شده بر اساس مدل TAP استفاده کنید. قطعه کد زیر نشان می‌دهد که چگونه می‌توان اطلاعات یک صندوق ایمیل را با استفاده از متد الگوی ناهمگام مبتنی بر تسک به نام GetMailboxInfoAsync و سپس پس از مدتی این فرآیند را قطع کنید.

// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET

using (Pop3Client client = new Pop3Client(host, 995, senderEmail, password, SecurityOptions.Auto))
{
    CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
    AutoResetEvent autoResetEvent = new AutoResetEvent(false);
    Exception exception = null;

    ThreadPool.QueueUserWorkItem(delegate
    {
        try
        {
            // start receiving mailbox information
            var task = client.GetMailboxInfoAsync(cancellationTokenSource.Token);
            Pop3MailboxInfo mailboxInfo = task.GetAwaiter().GetResult();
            Console.WriteLine("Message count: " + mailboxInfo.MessageCount);
        }
        catch (Exception e)
        {
            exception = e;
        }
        finally
        {
            autoResetEvent.Set();
        }
    });

    Thread.Sleep(2000);

    // stop receiving mailbox information
    cancellationTokenSource.Cancel();
    autoResetEvent.WaitOne();

    if (exception is OperationCanceledException)
        Console.WriteLine("Operation has been interrupted: " + exception.Message);
}