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.
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);
}
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.
MailQueryBuilder builder = new MailQueryBuilder();
builder.Subject.Contains("Subject");
MailQuery query = builder.GetQuery();
IAsyncResult asyncResult = client.BeginListMessages(query);
Pop3MessageInfoCollection messages = client.EndListMessages(asyncResult);
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.
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);
}