Gestion asynchrone des e-mails avec le client POP3

Opérations asynchrones avec Pop3Client

Travailler avec les messages peut également être effectué de manière asynchrone en utilisant Aspose.Email Pop3Client. Cet article montre comment récupérer des messages d’une boîte aux lettres de façon asynchrone. Il montre également comment lister les messages en fournissant des critères de recherche à l’aide de MailQuery. Il sera montré séparément comment interrompre une opération avec une boîte aux lettres démarrée par un modèle asynchrone basé sur les tâches (TAP) méthode.

Récupérer des messages de manière asynchrone

Le fragment de code suivant vous montre comment récupérer les messages de manière asynchrone.

Pop3Client client = new Pop3Client();
client.Host = "pop.gmail.com";
client.Port = 995;
client.SecurityOptions = SecurityOptions.SSLImplicit;
client.Username = "username";
client.Password = "password";
            
try
{
    Pop3MessageInfoCollection messages = client.ListMessages();
    Console.WriteLine("Total Number of Messages in inbox:" + messages.Count);
    AutoResetEvent evnt = new AutoResetEvent(false);
    MailMessage message = null;
    AsyncCallback callback = delegate(IAsyncResult ar)
    {
        message = client.EndFetchMessage(ar);
        evnt.Set();
    };
    client.BeginFetchMessage(messages[0].SequenceNumber, callback, null);
    evnt.WaitOne();
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}

Lister les messages de façon asynchrone avec MailQuery

Le MailQuery la classe peut être utilisée pour spécifier les critères de recherche afin de récupérer une liste de messages de façon asynchrone, comme le montre l’exemple de code suivant.

MailQueryBuilder builder = new MailQueryBuilder();
builder.Subject.Contains("Subject");
MailQuery query = builder.GetQuery();
IAsyncResult asyncResult = client.BeginListMessages(query);
Pop3MessageInfoCollection messages = client.EndListMessages(asyncResult);

Interruption d’une méthode TAP

À partir de .NET Framework 4.5, vous pouvez utiliser des méthodes asynchrones implémentées selon le modèle TAP. L’extrait de code ci‑dessous montre comment recevoir des informations sur une boîte aux lettres en utilisant la méthode basée sur le modèle asynchrone nommée GetMailboxInfoAsync et interrompre ensuite ce processus après un certain temps.


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