معالجة البريد الإلكتروني غير المتزامنة باستخدام عميل 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);
}