Asynchroniczne operacje e-mailowe z uwierzytelnieniem OAuth i klientem EWS
Asynchroniczna metoda pobierania tokenu OAuth
W przeciwieństwie do metod synchronicznych, metody asynchroniczne nie blokują i pozwalają na wykonywanie wielu żądań jednocześnie. Metody asynchroniczne mają przyrostek Async.
UWAGA: Metody asynchroniczne są dostępne w wersjach ukierunkowanych na .NET Core, .NET Framework 4.5 i nowsze.
Poniższy przykład kodu definiuje SomeAsyncTokenProvider klasę, która implementuje IAsyncTokenProvider interfejs. Klasa implementuje GetAccessTokenAsync asynchroniczna metoda zwracająca Task typu OAuthToken. Ta metoda pobiera prawidłowy OAuthToken asynchronicznie.
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()
{
...
}
}
Asynchroniczna konfiguracja klienta EWS z uwierzytelnianiem OAuth
Następny przykład kodu uzyskuje klienta Exchange Web Services (EWS) asynchronicznie przy użyciu uwierzytelniania OAuth. Kod wykonuje następujące kroki:
- Tworzy nowy CancellationToken obiekt, który może być użyty do anulowania operacji asynchronicznych.
- Instancjonuje
SomeAsyncTokenProviderklasa, która implementuje IAsyncTokenProvider interfejs. Ta klasa jest używana jako parametr przy konstruowaniu nowego OAuthNetworkCredential obiekt. - Ustawia URI skrzynki pocztowej na punkt końcowy Exchange Web Services.
- Wywołuje GetEwsClientAsync metoda EWSClient klasa z
mailboxUriiOAuthNetworkCredentialobiekt jako parametr. Ta metoda zwraca obiekt Task, więc oczekuje na wynik przed kontynuacją. TencancellationTokenobiekt jest przekazywany jako opcjonalny 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);
Wysyłanie wiadomości e-mail
Poniższy przykład kodu próbuje wysłać wiadomość e-mail asynchronicznie. Kod wykonuje następujące kroki:
- Tworzy nowy MailMessage obiekt z parametrami wiadomości.
- Wywołuje SendAsync metoda EWSClient obiekt, przekazując MailMessage jako parametr. Metoda jest oczekiwana (await), ponieważ zwraca obiekt Task.
cancellationTokenobiekt jest przekazywany jako opcjonalny parametr do SendAsync metoda.
MailMessage message = new MailMessage("from@aspose.com", "to@aspose.com", "Some subject", "Some body");
await ewsClient.SendAsync(message, cancellationToken: cancellationToken);
Pobierz wiadomości e-mail
Aby asynchronicznie pobrać wiadomość e-mail, użyj poniższego przykładu kodu z opisanymi krokami:
-
Wywołaj FetchItemAsync metoda klienta EWSclient. Metoda przyjmuje dwa parametry:
messageUrijest ciągiem znaków reprezentującym URI wiadomości do pobraniacancellationTokenjest opcjonalnym parametrem, który może być użyty do anulowania operacji asynchronicznej. Metoda zwraca obiekt Task, który rozwiązuje się do MapiMessage obiekt po zakończeniu operacji asynchronicznej. Słowo kluczowe "await" jest używane do oczekiwania na zakończenie obiektu Task przed kontynuacją.
-
Przypisz do
fetchedzmienna otrzymuje wynik ukończonego zadania Task, którym jest MapiMessage obiekt zawierający pobrane dane wiadomości.var fetched = await ewsClient.FetchItemAsync(messageUri, cancellationToken: cancellationToken);
Dołącz wiadomości e-mail
Poniższy przykład kodu próbuje asynchronicznie dołączyć wiadomości e-mail. Kod wykonuje następujące kroki:
-
Wywołuje AppendMessagesAsync metoda obiektu EWSclient obiekt. Metoda przyjmuje EwsAppendMessage obiekt zawierający parametry: wiadomości do dołączenia, docelowy URI folderu oraz token anulowania.
-
Tworzy EwsAppendMessage obiekt przy użyciu Utwórz metoda i konfiguruje ją następującymi wywołaniami metod:
- AddMessage dodaje wiadomość do operacji dołączania.
- SetFolder ustawia docelowy URI folderu dla operacji dołączania.
- SetCancellationToken ustawia token anulowania, który może być użyty do anulowania operacji asynchronicznej.
-
Ten AppendMessagesAsync metoda zwraca obiekt Task, który rozwiązuje się do obiektu IEnumerable
po zakończeniu operacji asynchronicznej. Słowo kluczowe "await" jest używane do oczekiwania na zakończenie obiektu Task przed kontynuacją. -
Ten
uriszmienna otrzymuje wynik ukończonego zadania Task, którym jest obiekt IEnumerablezawierający URI dołączonych wiadomości.
IEnumerable<string> uris = await ewsClient.AppendMessagesAsync(
EwsAppendMessage.Create()
.AddMessage(message)
.AddMessage(fetched)
.SetFolder(folderUri)
.SetCancellationToken(cancellationToken));
Kopiuj elementy
Poniższy przykład kodu pokazuje, jak kopiować elementy i wykonuje następujące kroki:
-
Wywołuje CopyItemAsync metoda obiektu EWSClient obiekt. Metoda przyjmuje trzy parametry:
messageUrijest ciągiem znaków reprezentującym URI wiadomości do skopiowaniadestinationFolderUrijest ciągiem znaków reprezentującym URI docelowego folderucancellationTokenjest opcjonalnym parametrem, który może być użyty do anulowania operacji asynchronicznej.
Metoda zwraca obiekt Task, który rozwiązuje się do ciągu znaków po zakończeniu operacji asynchronicznej. Słowo kluczowe "await" jest używane do oczekiwania na zakończenie obiektu Task przed kontynuacją.
-
newItemUrizmienna otrzymuje wynik ukończonego zadania Task, którym jest ciąg znaków zawierający URI nowo utworzonej kopii wiadomości.
string newItemUri = await ewsClient.CopyItemAsync(messageUri, destinationFolderUri, cancellationToken);
Usuń elementy
Poniższy kod próbuje usunąć wiadomość e-mail asynchronicznie.
Wywołuje DeleteItemAsync metoda obiektu EWSClient. Metoda przyjmuje trzy parametry:
newItemUrijest ciągiem znaków reprezentującym URI elementu do usunięciaDeletionOptions.DeletePermanentlyokreśla, że element powinien być usunięty trwalecancellationTokenjest opcjonalnym parametrem, który może być użyty do anulowania operacji asynchronicznej.
Metoda zwraca obiekt Task, który kończy się po zakończeniu operacji asynchronicznej. Słowo kluczowe "await" jest używane do oczekiwania na zakończenie obiektu Task przed kontynuacją.
await ewsClient.DeleteItemAsync(newItemUri, DeletionOptions.DeletePermanently, cancellationToken);
Usuń foldery
Poniższy kod próbuje usunąć folder asynchronicznie.
Wywołuje DeleteFolderAsync metoda obiektu EWSClient. Metoda przyjmuje trzy parametry:
folderUrijest ciągiem znaków reprezentującym URI folderu do usunięciadeletePermanentlyokreśla, czy folder ma zostać usunięty trwale, czy przeniesiony do folderu "Usunięte elementy"cancellationTokenjest opcjonalnym parametrem, który może być użyty do anulowania operacji asynchronicznej.
Metoda zwraca obiekt Task, który kończy się po zakończeniu operacji asynchronicznej. Słowo kluczowe "await" jest używane do oczekiwania na zakończenie obiektu Task przed kontynuacją.
const bool deletePermanently = true;
await ewsClient.DeleteFolderAsync(folderUri, deletePermanently, cancellationToken);
Aktualizuj elementy
Poniższy przykład kodu próbuje zaktualizować element asynchronicznie. Wykonuje następujące kroki:
- Tworzy EwsUpdateItem obiekt przy użyciu Utwórz metoda, przekazując obiekt elementu. EwsUpdateItem reprezentuje parametry operacji aktualizacji. SetCancellationToken metoda jest wywoływana na EwsUpdateItem obiekt, przekazując
cancellationTokenparametr, który jest opcjonalny i może być użyty do anulowania operacji asynchronicznej. - Przekazuje EwsUpdateItem obiekt jako parametr do UpdateItemAsync metoda obiektu EWSClient.
- Ten UpdateItemAsync metoda zwraca obiekt Task, który kończy się po zakończeniu operacji asynchronicznej. Słowo kluczowe "await" jest używane do oczekiwania na zakończenie obiektu Task przed kontynuacją.
await ewsClient.UpdateItemAsync(
EwsUpdateItem.Create(mapiNote)
.SetCancellationToken(cancellationToken));