Asynchronní operace s e-maily s OAuth autentizací a klientem EWS
Asynchronní metoda pro získání OAuth tokenu
Na rozdíl od synchronních metod jsou asynchronní metody neblokující a umožňují provádět více požadavků současně. Asynchronní metody jsou pojmenovány s příponou Async.
POZNÁMKA: Asynchronní metody jsou k dispozici ve verzích cílících na .NET Core, .NET Framework 4.5 a novější.
Následující ukázka kódu definuje SomeAsyncTokenProvider třída, která implementuje IAsyncTokenProvider rozhraní. Třída implementuje GetAccessTokenAsync asynchronní metoda, která vrací Task typu OAuthToken. Tato metoda získá platný OAuthToken asynchronně.
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()
{
...
}
}
Asynchronní nastavení EWS klienta s OAuth ověřením
Další příklad kódu získává klienta Exchange Web Services (EWS) asynchronně pomocí OAuth ověřování. Kód provádí následující kroky:
- Vytváří nový CancellationToken objekt, který může být použit k zrušení asynchronních operací.
- Vytvoří instance
SomeAsyncTokenProvidertřída, která implementuje IAsyncTokenProvider rozhraní. Tato třída se používá jako parametr při vytváření nového OAuthNetworkCredential objektu. - Nastaví URI poštovní schránky na koncový bod Exchange Web Services.
- Volá GetEwsClientAsync metoda třídy EWSClient třída s
mailboxUriaOAuthNetworkCredentialobjekt jako parametry. Tato metoda vrací objekt Task, takže čeká na výsledek před pokračováním. ThecancellationTokenobjekt je předán jako volitelný parametr do GetEwsClientAsync metoda.
//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);
Odesílání e‑mailových zpráv
Níže uvedený příklad kódu se pokouší odeslat e‑mailovou zprávu asynchronně. Kód provádí následující kroky:
- Vytváří nový MailMessage objekt s parametry zprávy.
- Volá SendAsync metoda třídy EWSClient objekt, přičemž MailMessage je předán jako parametr. Metoda je čekána, protože vrací objekt Task.
cancellationTokenobjekt je předán jako volitelný parametr do SendAsync metoda.
MailMessage message = new MailMessage("from@aspose.com", "to@aspose.com", "Some subject", "Some body");
await ewsClient.SendAsync(message, cancellationToken: cancellationToken);
Načíst e-mailové zprávy
Pro asynchronní načtení e-mailové zprávy použijte následující ukázkový kód s kroky popsanými níže:
-
Zavolejte FetchItemAsync metoda objektu EWSclient. Metoda přijímá dva parametry:
messageUrije řetězec představující URI zprávy k načtenícancellationTokenje volitelný parametr, který může být použit k zrušení asynchronní operace. Metoda vrací objekt Task, který se vyřeší na MapiMessage objektu, když je asynchronní operace dokončena. Klíčové slovo "await" se používá k čekání na dokončení objektu Task před pokračováním.
-
Přiřaďte do
fetchedproměnná s výsledkem dokončeného Task, který je MapiMessage objekt obsahující načtená data zprávy.var fetched = await ewsClient.FetchItemAsync(messageUri, cancellationToken: cancellationToken);
Připojit e-mailové zprávy
Níže uvedený příklad kódu se pokouší asynchronně připojit e-mailové zprávy. Kód provádí následující kroky:
-
Volá AppendMessagesAsync metoda EWSclient objekt. Metoda přijímá EwsAppendMessage objekt, který obsahuje parametry: zprávy k připojení, URI cílové složky a token pro zrušení.
-
Vytváří EwsAppendMessage objekt pomocí Vytvořit metoda a konfiguruje ji následujícími voláními metod:
- AddMessage přidává zprávu k operaci připojení.
- SetFolder nastavuje URI cílové složky pro operaci připojení.
- SetCancellationToken nastavuje token pro zrušení, který lze použít k zrušení asynchronní operace.
-
The AppendMessagesAsync Metoda vrací objekt Task, který se vyřeší na objekt IEnumerable
, když je asynchronní operace dokončena. Klíčové slovo "await" se používá k čekání na dokončení objektu Task před pokračováním. -
The
urisproměnná je přiřazena výsledku dokončeného Task, který je objekt IEnumerableobsahující URI připojených zpráv.
IEnumerable<string> uris = await ewsClient.AppendMessagesAsync(
EwsAppendMessage.Create()
.AddMessage(message)
.AddMessage(fetched)
.SetFolder(folderUri)
.SetCancellationToken(cancellationToken));
Kopírovat položky
Níže uvedený ukázkový kód ukazuje, jak kopírovat položky a provádí následující kroky:
-
Volá CopyItemAsync metoda EWSClient objekt. Metoda přijímá tři parametry:
messageUrije řetězec představující URI zprávy k kopírovánídestinationFolderUrije řetězec představující URI cílové složkycancellationTokenje volitelný parametr, který může být použit k zrušení asynchronní operace.
Metoda vrací objekt Task, který se vyřeší na řetězec, když je asynchronní operace dokončena. Klíčové slovo "await" se používá k čekání na dokončení objektu Task před pokračováním.
-
newItemUriproměnná je přiřazena výsledku dokončeného Task, který je řetězec obsahující URI nově vytvořené kopie zprávy.
string newItemUri = await ewsClient.CopyItemAsync(messageUri, destinationFolderUri, cancellationToken);
Smazat položky
Níže uvedený kód se pokouší smazat e-mailovou zprávu asynchronně.
Volá DeleteItemAsync metoda objektu EWSClient. Metoda přijímá tři parametry:
newItemUrije řetězec představující URI položky k smazáníDeletionOptions.DeletePermanentlyurčuje, že položka má být smazána trvalecancellationTokenje volitelný parametr, který může být použit k zrušení asynchronní operace.
Metoda vrací objekt Task, který se dokončí, jakmile je asynchronní operace ukončena. Klíčové slovo "await" se používá k čekání na dokončení objektu Task před pokračováním.
await ewsClient.DeleteItemAsync(newItemUri, DeletionOptions.DeletePermanently, cancellationToken);
Smazat složky
Níže uvedený kód se pokouší smazat složku asynchronně.
Volá DeleteFolderAsync metoda objektu EWSClient. Metoda přijímá tři parametry:
folderUrije řetězec představující URI složky k smazánídeletePermanentlyurčuje, zda složku smazat trvale nebo ji přesunout do složky "Deleted Items"cancellationTokenje volitelný parametr, který může být použit k zrušení asynchronní operace.
Metoda vrací objekt Task, který se dokončí, jakmile je asynchronní operace ukončena. Klíčové slovo "await" se používá k čekání na dokončení objektu Task před pokračováním.
const bool deletePermanently = true;
await ewsClient.DeleteFolderAsync(folderUri, deletePermanently, cancellationToken);
Aktualizovat položky
Níže uvedený příklad kódu se snaží asynchronně aktualizovat položku. Provede následující kroky:
- Vytváří EwsUpdateItem objekt pomocí Vytvořit metoda, předávajíc objekt položky. EwsUpdateItem představuje parametry operace aktualizace. SetCancellationToken metoda je volána na EwsUpdateItem objekt, předávajíc
cancellationTokenparametr, který je volitelný a může být použit k zrušení asynchronní operace. - Předává EwsUpdateItem objekt jako parametr pro UpdateItemAsync metoda EWSClient.
- The UpdateItemAsync metoda vrací objekt Task, který se dokončí, jakmile je asynchronní operace ukončena. Klíčové slovo "await" se používá k čekání na dokončení objektu Task před pokračováním.
await ewsClient.UpdateItemAsync(
EwsUpdateItem.Create(mapiNote)
.SetCancellationToken(cancellationToken));