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