Asynchrone E-Mail-Operationen mit OAuth-Authentifizierung & EWS-Client

Async‑Methode zum Abrufen eines OAuth‑Tokens

Im Gegensatz zu den synchronen Methoden sind die asynchronen Methoden nicht blockierend und ermöglichen das gleichzeitige Durchführen mehrerer Anfragen. Asynchrone Methoden erhalten das Suffix Async.

HINWEIS: Async‑Methoden sind in Versionen verfügbar, die .NET Core, .NET Framework 4.5 und höher ansprechen.

Das folgende Codebeispiel definiert ein SomeAsyncTokenProvider Klasse, die das implementiert IAsyncTokenProvider Schnittstelle. Die Klasse implementiert GetAccessTokenAsync asynchrone Methode, die ein Task vom Typ OAuthToken zurückgibt. Diese Methode holt ein gültiges OAuthToken asynchron.

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()
    {
        ...
    }
}

Asynchrones EWS‑Client‑Setup mit OAuth‑Authentifizierung

Das nächste Codebeispiel ruft einen Exchange Web Services (EWS)‑Client asynchron über OAuth‑Authentifizierung ab. Der Code führt die folgenden Schritte aus:

  1. Erstellt ein neues CancellationToken Objekt, das verwendet werden kann, um asynchrone Vorgänge abzubrechen.
  2. Instanziiert SomeAsyncTokenProvider Klasse, die das implementiert IAsyncTokenProvider Schnittstelle. Diese Klasse wird als Parameter zum Erzeugen eines neuen OAuthNetworkCredential Objekt.
  3. Setzt die Postfach‑URI auf den Endpunkt von Exchange Web Services.
  4. Ruft die GetEwsClientAsync Methode des EWSClient Klasse mit dem mailboxUri und OAuthNetworkCredential Objekt als Parameter. Diese Methode gibt ein Task‑Objekt zurück, daher wartet sie das Ergebnis ab, bevor sie fortfährt. Der cancellationToken Objekt wird als optionaler Parameter an die GetEwsClientAsync Methode.
//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);

E‑Mail‑Nachrichten senden

Das nachstehende Codebeispiel versucht, eine E‑Mail-Nachricht asynchron zu senden. Der Code führt die folgenden Schritte aus:

  1. Erstellt ein neues MailMessage Objekt mit den Nachrichtenparametern.
  2. Ruft die SendAsync Methode des EWSClient Objekt, wobei die MailMessage als Parameter übergeben wird. Die Methode wird mit await aufgerufen, da sie ein Task-Objekt zurückgibt. Das cancellationToken Objekt wird als optionaler Parameter an die SendAsync Methode.
MailMessage message = new MailMessage("from@aspose.com", "to@aspose.com", "Some subject", "Some body");
await ewsClient.SendAsync(message, cancellationToken: cancellationToken);

E-Mails abrufen

Um eine E-Mail-Nachricht asynchron abzurufen, verwenden Sie das folgende Codebeispiel mit den unten beschriebenen Schritten:

  1. Rufen Sie die FetchItemAsync Methode eines EWSclient. Die Methode akzeptiert zwei Parameter:

    • messageUri ist ein String, der die URI der abzurufenden Nachricht darstellt
    • cancellationToken ist ein optionaler Parameter, der verwendet werden kann, um die asynchrone Operation abzubrechen. Die Methode gibt ein Task-Objekt zurück, das zu einem MapiMessage Objekt, wenn die asynchrone Operation abgeschlossen ist. Das Schlüsselwort "await" wird verwendet, um auf das Abschließen des Task-Objekts zu warten, bevor fortgefahren wird.
  2. Zuweisen zum fetched Variable erhält das Ergebnis des abgeschlossenen Task, das ein MapiMessage Objekt, das die abgerufenen Nachrichtendaten enthält.

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

E-Mails anhängen

Das folgende Codebeispiel versucht, E-Mails asynchron anzuhängen. Der Code führt die folgenden Schritte aus:

  1. Ruft die AppendMessagesAsync Methode eines EWSclient Objekt. Die Methode nimmt ein EwsAppendMessage Objekt, das Parameter enthält: die anzuhängenden Nachrichten, die Zielordner-URI und das CancellationToken.

  2. Erstellt das EwsAppendMessage Objekt mithilfe der Erstellen Methode und konfiguriert sie mit den folgenden Methodenaufrufen:

    • AddMessage fügt eine Nachricht zur Anhänge-Operation hinzu.
    • SetFolder setzt die Zielordner-URI für die Anhänge-Operation.
    • SetCancellationToken setzt das CancellationToken, das verwendet werden kann, um die asynchrone Operation abzubrechen.
  3. Die AppendMessagesAsync Methode gibt ein Task-Objekt zurück, das zu einem IEnumerable-Objekt aufgelöst wird, sobald die asynchrone Operation abgeschlossen ist. Das Schlüsselwort "await" wird verwendet, um auf das Abschließen des Task-Objekts zu warten, bevor fortgefahren wird.

  4. Die uris Variable erhält das Ergebnis des abgeschlossenen Task, ein IEnumerable-Objekt, das die URIs der angehängten Nachrichten enthält.

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

Elemente kopieren

Das untenstehende Codebeispiel zeigt, wie Elemente kopiert werden und führt die folgenden Schritte aus:

  1. Ruft die CopyItemAsync Methode eines EWSClient Objekt. Die Methode akzeptiert drei Parameter:

    • messageUri ist eine Zeichenkette, die die URI der zu kopierenden Nachricht darstellt
    • destinationFolderUri ist eine Zeichenkette, die die URI des Zielordners darstellt
    • cancellationToken ist ein optionaler Parameter, der verwendet werden kann, um die asynchrone Operation abzubrechen.

    Methode gibt ein Task-Objekt zurück, das zu einem String aufgelöst wird, sobald die asynchrone Operation abgeschlossen ist. Das Schlüsselwort "await" wird verwendet, um auf das Abschließen des Task-Objekts zu warten, bevor fortgefahren wird.

  2. newItemUri Variable erhält das Ergebnis des abgeschlossenen Task, ein String, der die URI der neu erstellten Kopie der Nachricht enthält.

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

Elemente löschen

Der folgende Code versucht, eine E-Mail-Nachricht asynchron zu löschen.

Sie ruft die DeleteItemAsync Methode eines EWSClient-Objekts. Die Methode akzeptiert drei Parameter:

  • newItemUri ist eine Zeichenkette, die die URI des zu löschenden Elements darstellt
  • DeletionOptions.DeletePermanently gibt an, dass das Element dauerhaft gelöscht werden soll
  • cancellationToken ist ein optionaler Parameter, der verwendet werden kann, um die asynchrone Operation abzubrechen.

Methode gibt ein Task-Objekt zurück, das abgeschlossen ist, wenn die asynchrone Operation beendet ist. Das Schlüsselwort "await" wird verwendet, um auf das Abschließen des Task-Objekts zu warten, bevor fortgefahren wird.

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

Ordner löschen

Der folgende Code versucht, einen Ordner asynchron zu löschen.

Sie ruft die DeleteFolderAsync Methode eines EWSClient-Objekts. Die Methode akzeptiert drei Parameter:

  • folderUri ist eine Zeichenkette, die die URI des zu löschenden Ordners darstellt
  • deletePermanently gibt an, ob der Ordner dauerhaft gelöscht oder in den Ordner "Gelöschte Elemente" verschoben werden soll
  • cancellationToken ist ein optionaler Parameter, der verwendet werden kann, um die asynchrone Operation abzubrechen.

Methode gibt ein Task-Objekt zurück, das abgeschlossen ist, wenn die asynchrone Operation beendet ist. Das Schlüsselwort "await" wird verwendet, um auf das Abschließen des Task-Objekts zu warten, bevor fortgefahren wird.

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

Elemente aktualisieren

Das nachstehende Codebeispiel versucht, ein Element asynchron zu aktualisieren. Es führt die folgenden Schritte aus:

  1. Erstellt ein EwsUpdateItem Objekt mithilfe der Erstellen Methode, wobei ein Elementobjekt übergeben wird. Der EwsUpdateItem repräsentiert die Parameter einer Aktualisierungsoperation. Der SetCancellationToken Methode wird auf dem EwsUpdateItem Objekt, wobei übergeben wird cancellationToken Parameter, der optional ist und verwendet werden kann, um die asynchrone Operation abzubrechen.
  2. Gibt das EwsUpdateItem Objekts als Parameter für die UpdateItemAsync Methode eines EWSClient.
  3. Die UpdateItemAsync Methode gibt ein Task-Objekt zurück, das abgeschlossen ist, wenn die asynchrone Operation beendet ist. Das Schlüsselwort "await" wird verwendet, um auf das Abschließen des Task-Objekts zu warten, bevor fortgefahren wird.
await ewsClient.UpdateItemAsync(
    EwsUpdateItem.Create(mapiNote)
        .SetCancellationToken(cancellationToken));