Asynchrone e‑mailafhandeling met POP3‑client

Asynchrone bewerkingen met Pop3Client

Werken met berichten kan ook asynchroon worden uitgevoerd met behulp van Aspose.Email Pop3Client. Dit artikel toont hoe u berichten asynchroon uit een mailbox kunt ophalen. Het laat ook zien hoe u berichten kunt weergeven door zoekcriteria te geven met behulp van MailQuery. Het zal apart worden getoond hoe u een bewerking met een mailbox kunt onderbreken die is gestart met een taakgebaseerd asynchroon patroon (TAP) methode.

Berichten Asynchroon Ophalen

Het onderstaande codefragment toont hoe u berichten asynchroon kunt ophalen.

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

Berichten asynchroon weergeven met MailQuery

De MailQuery klasse kan worden gebruikt om zoekcriteria op te geven voor het asynchroon ophalen van een berichtenlijst, zoals getoond in het volgende codevoorbeeld.

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

Een TAP‑methode onderbreken

Vanaf .NET Framework 4.5 kun je asynchrone methoden gebruiken die volgens het TAP‑model zijn geïmplementeerd. De code‑fragment hieronder laat zien hoe je informatie over een mailbox kunt ontvangen met behulp van de task‑gebaseerde asynchrone patroonmethode genaamd GetMailboxInfoAsync en onderbreek dit proces daarna een tijdje.


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