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:

  1. Tworzy nowy CancellationToken obiekt, który może być użyty do anulowania operacji asynchronicznych.
  2. Instancjonuje SomeAsyncTokenProvider klasa, która implementuje IAsyncTokenProvider interfejs. Ta klasa jest używana jako parametr przy konstruowaniu nowego OAuthNetworkCredential obiekt.
  3. Ustawia URI skrzynki pocztowej na punkt końcowy Exchange Web Services.
  4. Wywołuje GetEwsClientAsync metoda EWSClient klasa z mailboxUri i OAuthNetworkCredential obiekt jako parametr. Ta metoda zwraca obiekt Task, więc oczekuje na wynik przed kontynuacją. Ten cancellationToken obiekt 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:

  1. Tworzy nowy MailMessage obiekt z parametrami wiadomości.
  2. Wywołuje SendAsync metoda EWSClient obiekt, przekazując MailMessage jako parametr. Metoda jest oczekiwana (await), ponieważ zwraca obiekt Task. cancellationToken obiekt 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:

  1. Wywołaj FetchItemAsync metoda klienta EWSclient. Metoda przyjmuje dwa parametry:

    • messageUri jest ciągiem znaków reprezentującym URI wiadomości do pobrania
    • cancellationToken jest 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ą.
  2. Przypisz do fetched zmienna 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:

  1. 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.

  2. 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.
  3. 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ą.

  4. Ten uris zmienna otrzymuje wynik ukończonego zadania Task, którym jest obiekt IEnumerable zawierają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:

  1. Wywołuje CopyItemAsync metoda obiektu EWSClient obiekt. Metoda przyjmuje trzy parametry:

    • messageUri jest ciągiem znaków reprezentującym URI wiadomości do skopiowania
    • destinationFolderUri jest ciągiem znaków reprezentującym URI docelowego folderu
    • cancellationToken jest 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ą.

  2. newItemUri zmienna 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:

  • newItemUri jest ciągiem znaków reprezentującym URI elementu do usunięcia
  • DeletionOptions.DeletePermanently określa, że element powinien być usunięty trwale
  • cancellationToken jest 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:

  • folderUri jest ciągiem znaków reprezentującym URI folderu do usunięcia
  • deletePermanently określa, czy folder ma zostać usunięty trwale, czy przeniesiony do folderu "Usunięte elementy"
  • cancellationToken jest 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:

  1. 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 cancellationToken parametr, który jest opcjonalny i może być użyty do anulowania operacji asynchronicznej.
  2. Przekazuje EwsUpdateItem obiekt jako parametr do UpdateItemAsync metoda obiektu EWSClient.
  3. 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));