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:
- Skapar en ny CancellationToken objekt som kan användas för att avbryta asynkrona operationer.
- Instansierar
SomeAsyncTokenProviderklass som implementerar IAsyncTokenProvider gränssnitt. Denna klass används som en parameter för att konstruera en ny OAuthNetworkCredential objekt. - Ställer in brevlådans URI till Exchange Web Services‑ändpunkten.
- Anropar GetEwsClientAsync metod för EWSClient klass med
mailboxUriochOAuthNetworkCredentialobjekt som parametrar. Denna metod returnerar ett Task‑objekt, så den väntar på resultatet innan den fortsätter. DencancellationTokenobjekt 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:
- Skapar en ny MailMessage objekt med meddelandeparametrarna.
- Anropar SendAsync metod för EWSClient objekt, genom att skicka MailMessage som parameter. Metoden väntas på eftersom den returnerar ett Task-objekt.
cancellationTokenobjekt 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:
-
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ämtascancellationTokenä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.
-
Tilldela till
fetchedvariabeln 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:
-
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.
-
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.
-
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. -
Den
urisvariabeln 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:
-
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 kopierasdestinationFolderUriär en sträng som representerar URI:n för destinationsmappencancellationTokenä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.
-
newItemUrivariabeln 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 raderasDeletionOptions.DeletePermanentlyanger att objektet ska raderas permanentcancellationTokenä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 raderasdeletePermanentlyanger 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:
- 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
cancellationTokenparameter, som är en valfri parameter som kan användas för att avbryta den asynkrona operationen. - Skickar EwsUpdateItem objekt som parameter till UpdateItemAsync metod för en EWSClient.
- 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));