Asynkrona e-postoperationer med OAuth-autentisering & EWS-klient

Asynkron metod för att hämta OAuth‑token

Till skillnad från de synkrona metoderna är de asynkrona icke‑blockerande och möjliggör flera samtidiga förfrågningar. Asynkrona metoder får suffixet Async.

OBS: Asynkrona metoder är tillgängliga i versioner som riktar sig mot .NET Core, .NET Framework 4.5 och senare.

Följande kodexempel definierar en SomeAsyncTokenProvider klass, som implementerar IAsyncTokenProvider gränssnitt. Klassen implementerar GetAccessTokenAsync asynkron metod som returnerar ett Task av typen OAuthToken. Denna metod hämtar en giltig OAuthToken asynkront.

private class SomeAsyncTokenProvider : IAsyncTokenProvider
{
    public SomeAsyncTokenProvider( /*some parameters*/)
    {
        ...
    }

    public async Task<OAuthToken> GetAccessTokenAsync(bool ignoreExistingToken = false,
        CancellationToken cancellationToken = default)
    {
        //Some asynchronous code to get a valid OAuthToken
        ...
    }

    public void Dispose()
    {
        ...
    }
}

Asynkron EWS‑klientinställning med OAuth‑autentisering

Nästa kodexempel hämtar en Exchange Web Services (EWS)‑klient asynkront med OAuth‑autentisering. Koden utför följande steg:

  1. Skapar en ny CancellationToken objekt som kan användas för att avbryta asynkrona operationer.
  2. Instansierar SomeAsyncTokenProvider klass som implementerar IAsyncTokenProvider gränssnitt. Denna klass används som en parameter för att konstruera en ny OAuthNetworkCredential objekt.
  3. Ställer in brevlådans URI till Exchange Web Services‑ändpunkten.
  4. Anropar GetEwsClientAsync metod för EWSClient klass med mailboxUri och OAuthNetworkCredential objekt som parametrar. Denna metod returnerar ett Task‑objekt, så den väntar på resultatet innan den fortsätter. Den cancellationToken objekt skickas som en valfri parameter till GetEwsClientAsync metod.
//The cancellationToken can be used
var cancellationToken = new CancellationToken();

//Create IAsyncEwsClientInstance
IAsyncTokenProvider tokenProvider = new SomeAsyncTokenProvider(/*some parameters*/);
const string mailboxUri = "https://outlook.office365.com/ews/exchange.asmx";
var ewsClient = await EWSClient.GetEwsClientAsync(mailboxUri, new OAuthNetworkCredential(tokenProvider),
    cancellationToken: cancellationToken);

Skicka e‑postmeddelanden

Kodexemplet nedan försöker skicka ett e‑postmeddelande asynkront. Koden utför följande steg:

  1. Skapar en ny MailMessage objekt med meddelandeparametrarna.
  2. Anropar SendAsync metod för EWSClient objekt, genom att skicka MailMessage som parameter. Metoden väntas på eftersom den returnerar ett Task-objekt. cancellationToken objekt skickas som en valfri parameter till SendAsync metod.
MailMessage message = new MailMessage("from@aspose.com", "to@aspose.com", "Some subject", "Some body");
await ewsClient.SendAsync(message, cancellationToken: cancellationToken);

Hämta e‑postmeddelanden

För att hämta ett e‑postmeddelande asynkront, använd följande kodexempel med stegen beskrivna nedan:

  1. Anropa FetchItemAsync metod för en EWSclient. Metoden tar två parametrar:

    • messageUri är en sträng som representerar URI:n för meddelandet som ska hämtas
    • cancellationToken är en valfri parameter som kan användas för att avbryta den asynkrona operationen. Metoden returnerar ett Task-objekt som löser till en MapiMessage objekt när den asynkrona operationen är klar. Nyckelordet "await" används för att vänta på att Task-objektet ska slutföras innan man fortsätter.
  2. Tilldela till fetched variabeln resultatet av den slutförda Task, vilket är en MapiMessage objekt som innehåller de hämtade meddelandedata.

       var fetched = await ewsClient.FetchItemAsync(messageUri, cancellationToken: cancellationToken);
    

Lägg till e‑postmeddelanden

Kodexemplet nedan försöker lägga till e-postmeddelanden asynkront. Koden utför följande steg:

  1. Anropar AppendMessagesAsync metod för en EWSclient objekt. Metoden tar ett EwsAppendMessage objekt som innehåller parametrar: meddelandena att lägga till, målmappens URI och avbokningstoken.

  2. Skapar EwsAppendMessage objekt med hjälp av Skapa metod och konfigurerar den med följande metodanrop:

    • AddMessage lägger till ett meddelande till tilläggsoperationen.
    • SetFolder ställer in målmappens URI för tilläggsoperationen.
    • SetCancellationToken ställer in avbokningstoken som kan användas för att avbryta den asynkrona operationen.
  3. Den AppendMessagesAsync Metoden returnerar ett Task-objekt som löser till ett IEnumerable-objekt när den asynkrona operationen är klar. Nyckelordet "await" används för att vänta på att Task-objektet ska slutföras innan man fortsätter.

  4. Den uris variabeln tilldelas resultatet av den slutförda Task, vilket är ett IEnumerable-objekt som innehåller URI:erna för de tillagda meddelandena.

IEnumerable<string> uris = await ewsClient.AppendMessagesAsync(
    EwsAppendMessage.Create()
        .AddMessage(message)
        .AddMessage(fetched)
        .SetFolder(folderUri)
        .SetCancellationToken(cancellationToken));

Kopiera objekt

Kodexemplet nedan visar hur man kopierar objekt och utför följande steg:

  1. Anropar CopyItemAsync metod för en EWSClient objekt. Metoden tar tre parametrar:

    • messageUri är en sträng som representerar URI:n för meddelandet som ska kopieras
    • destinationFolderUri är en sträng som representerar URI:n för destinationsmappen
    • cancellationToken är en valfri parameter som kan användas för att avbryta den asynkrona operationen.

    Metoden returnerar ett Task-objekt som löser till en sträng när den asynkrona operationen är klar. Nyckelordet "await" används för att vänta på att Task-objektet ska slutföras innan man fortsätter.

  2. newItemUri variabeln tilldelas resultatet av den slutförda Task, vilket är en sträng som innehåller URI:n för den nyss skapade kopian av meddelandet.

string newItemUri = await ewsClient.CopyItemAsync(messageUri, destinationFolderUri, cancellationToken);

Radera objekt

Följande kod försöker radera ett e-postmeddelande asynkront.

Den anropar DeleteItemAsync metod för ett EWSClient-objekt. Metoden tar tre parametrar:

  • newItemUri är en sträng som representerar URI:n för objektet som ska raderas
  • DeletionOptions.DeletePermanently anger att objektet ska raderas permanent
  • cancellationToken är en valfri parameter som kan användas för att avbryta den asynkrona operationen.

Metoden returnerar ett Task-objekt som avslutas när den asynkrona operationen är klar. Nyckelordet "await" används för att vänta på att Task-objektet ska slutföras innan man fortsätter.

await ewsClient.DeleteItemAsync(newItemUri, DeletionOptions.DeletePermanently, cancellationToken);

Radera mappar

Följande kod försöker radera en mapp asynkront.

Den anropar DeleteFolderAsync metod för ett EWSClient-objekt. Metoden tar tre parametrar:

  • folderUri är en sträng som representerar URI:n för mappen som ska raderas
  • deletePermanently anger om mappen ska raderas permanent eller flyttas till mappen "Deleted Items"
  • cancellationToken är en valfri parameter som kan användas för att avbryta den asynkrona operationen.

Metoden returnerar ett Task-objekt som avslutas när den asynkrona operationen är klar. Nyckelordet "await" används för att vänta på att Task-objektet ska slutföras innan man fortsätter.

const bool deletePermanently = true;
await ewsClient.DeleteFolderAsync(folderUri, deletePermanently, cancellationToken);

Uppdatera objekt

Kodexemplet nedan försöker uppdatera ett objekt asynkront. Det utför följande steg:

  1. Skapar en EwsUpdateItem objekt med hjälp av Skapa metod, genom att skicka in ett objekt. EwsUpdateItem representerar parametrar för en uppdateringsoperation. SetCancellationToken metod anropas på EwsUpdateItem objekt, genom att skicka in cancellationToken parameter, som är en valfri parameter som kan användas för att avbryta den asynkrona operationen.
  2. Skickar EwsUpdateItem objekt som parameter till UpdateItemAsync metod för en EWSClient.
  3. Den UpdateItemAsync Metoden returnerar ett Task-objekt som avslutas när den asynkrona operationen är klar. Nyckelordet "await" används för att vänta på att Task-objektet ska slutföras innan man fortsätter.
await ewsClient.UpdateItemAsync(
    EwsUpdateItem.Create(mapiNote)
        .SetCancellationToken(cancellationToken));