Работа с Pop3Client Асинхронно
Работа с сообщениями также может выполняться асинхронно с использованием Aspose.Email Pop3Client. В этой статье показано, как асинхронно извлекать сообщения из почтового ящика. Также показано, как перечислять сообщения, предоставив критерии поиска с помощью MailQuery. Отдельно будет показано, как прервать операцию с почтовым ящиком, запущенную с помощью метода асинхронной модели на основе задач (TAP).
Асинхронное извлечение сообщений
Следующий фрагмент кода показывает, как асинхронно извлекать сообщения.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
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); | |
} |
Асинхронный список сообщений с MailQuery
Класс MailQuery может использоваться для указания критериев поиска для асинхронного извлечения списка сообщений, как показано в следующем примере кода.
// For complete examples and data files, please go to https://github.com/aspose-email/Aspose.Email-for-.NET | |
MailQueryBuilder builder = new MailQueryBuilder(); | |
builder.Subject.Contains("Subject"); | |
MailQuery query = builder.GetQuery(); | |
IAsyncResult asyncResult = client.BeginListMessages(query); | |
Pop3MessageInfoCollection messages = client.EndListMessages(asyncResult); |
Как прервать метод TAP
Начиная с .NET Framework 4.5, вы можете использовать асинхронные методы, реализованные в соответствии с моделью TAP. Ниже представлен фрагмент кода, который показывает, как получить информацию о почтовом ящике с помощью метода асинхронной модели на основе задач с именем GetMailboxInfoAsync
, а затем прервать этот процесс через некоторое время.
// Для полных примеров и файлов данных, пожалуйста, перейдите на 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
{
// начинаем получать информацию о почтовом ящике
var task = client.GetMailboxInfoAsync(cancellationTokenSource.Token);
Pop3MailboxInfo mailboxInfo = task.GetAwaiter().GetResult();
Console.WriteLine("Количество сообщений: " + mailboxInfo.MessageCount);
}
catch (Exception e)
{
exception = e;
}
finally
{
autoResetEvent.Set();
}
});
Thread.Sleep(2000);
// останавливаем получение информации о почтовом ящике
cancellationTokenSource.Cancel();
autoResetEvent.WaitOne();
if (exception is OperationCanceledException)
Console.WriteLine("Операция была прервана: " + exception.Message);
}