Manejo Asíncrono de Correos con Cliente POP3

Operaciones asíncronas con Pop3Client

Trabajar con mensajes también puede realizarse de forma asíncrona usando Aspose.Email Pop3Client. Este artículo muestra cómo recuperar mensajes de un buzón de forma asíncrona. También muestra cómo listar mensajes proporcionando criterios de búsqueda usando MailQuery. Se mostrará por separado cómo interrumpir una operación con un buzón iniciada por un patrón asíncrono basado en tareas (TAP) método.

Recuperar mensajes de forma asíncrona

El siguiente fragmento de código muestra cómo recuperar mensajes de forma asíncrona.

Listar mensajes de forma asíncrona con MailQuery

El MailQuery la clase puede usarse para especificar criterios de búsqueda para recuperar una lista de mensajes de forma asíncrona, como se muestra en el siguiente ejemplo de código.

Interrumpiendo un método TAP

A partir de .NET Framework 4.5, puede usar métodos asíncronos implementados según el modelo TAP. El fragmento de código a continuación muestra cómo recibir información sobre un buzón utilizando el método basado en el patrón asíncrono basado en tareas llamado GetMailboxInfoAsync y luego interrumpir este proceso después de un tiempo.

// 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);
}