Asynchroniczna obsługa e‑maili przy użyciu klienta POP3
Asynchroniczne operacje z Pop3Client
Praca z wiadomościami może również być wykonywana asynchronicznie przy użyciu Aspose.Email Pop3Client. Ten artykuł pokazuje, jak asynchronicznie pobierać wiadomości z skrzynki pocztowej. Pokazuje także, jak wyświetlać wiadomości, podając kryteria wyszukiwania przy użyciu MailQuery. Zostanie przedstawione osobno, jak przerwać operację skrzynki pocztowej rozpoczętą w oparciu o wzorzec asynchroniczny oparty na zadaniach (TAP) metoda.
Pobieranie wiadomości asynchronicznie
Poniższy fragment kodu pokazuje, jak pobrać wiadomości asynchronicznie.
Listuj wiadomości asynchronicznie przy użyciu MailQuery
Ten MailQuery klasa może być użyta do określenia kryteriów wyszukiwania w celu asynchronicznego pobrania listy wiadomości, jak pokazano w poniższym przykładzie kodu.
Przerywanie metody TAP
Od .NET Framework 4.5 możesz używać metod asynchronicznych zaimplementowanych zgodnie z modelem TAP. Poniższy fragment kodu pokazuje, jak otrzymać informacje o skrzynce pocztowej przy użyciu metody opartej na wzorcu asynchronicznym zadania o nazwie GetMailboxInfoAsync a następnie przerwać ten proces po chwili.
// 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);
}