Gestione Asincrona delle Email con Client POP3

Operazioni asincrone con Pop3Client

Lavorare con i messaggi può anche essere eseguito in modo asincrono usando Aspose.Email Pop3Client. Questo articolo mostra come recuperare i messaggi da una casella in modo asincrono. Mostra anche come elencare i messaggi fornendo criteri di ricerca usando MailQuery. Verrà mostrato separatamente come interrompere un’operazione con una casella di posta avviata da un modello asincrono basato su task (TAP) metodo.

Recupera Messaggi in Modo Asincrono

Il seguente frammento di codice mostra come recuperare i messaggi in modo asincrono.

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

Elenca i messaggi in modo asincrono con MailQuery

Il MailQuery la classe può essere usata per specificare criteri di ricerca per recuperare una lista di messaggi in modo asincrono, come mostrato nel seguente esempio di codice.

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

Interruzione di un metodo TAP

A partire da .NET Framework 4.5, è possibile utilizzare metodi asincroni implementati secondo il modello TAP. Lo snippet di codice seguente mostra come ricevere informazioni su una casella di posta utilizzando il metodo basato sul modello asincrono denominato GetMailboxInfoAsync e poi interrompere questo processo dopo un po'.


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