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:
- Erstellt ein neues CancellationToken Objekt, das verwendet werden kann, um asynchrone Vorgänge abzubrechen.
- Instanziiert
SomeAsyncTokenProviderKlasse, die das implementiert IAsyncTokenProvider Schnittstelle. Diese Klasse wird als Parameter zum Erzeugen eines neuen OAuthNetworkCredential Objekt. - Setzt die Postfach‑URI auf den Endpunkt von Exchange Web Services.
- Ruft die GetEwsClientAsync Methode des EWSClient Klasse mit dem
mailboxUriundOAuthNetworkCredentialObjekt als Parameter. Diese Methode gibt ein Task‑Objekt zurück, daher wartet sie das Ergebnis ab, bevor sie fortfährt. DercancellationTokenObjekt 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:
- Erstellt ein neues MailMessage Objekt mit den Nachrichtenparametern.
- 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
cancellationTokenObjekt 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:
-
Rufen Sie die FetchItemAsync Methode eines EWSclient. Die Methode akzeptiert zwei Parameter:
messageUriist ein String, der die URI der abzurufenden Nachricht darstelltcancellationTokenist 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.
-
Zuweisen zum
fetchedVariable 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:
-
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.
-
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.
-
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. -
Die
urisVariable 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:
-
Ruft die CopyItemAsync Methode eines EWSClient Objekt. Die Methode akzeptiert drei Parameter:
messageUriist eine Zeichenkette, die die URI der zu kopierenden Nachricht darstelltdestinationFolderUriist eine Zeichenkette, die die URI des Zielordners darstelltcancellationTokenist 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.
-
newItemUriVariable 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:
newItemUriist eine Zeichenkette, die die URI des zu löschenden Elements darstelltDeletionOptions.DeletePermanentlygibt an, dass das Element dauerhaft gelöscht werden sollcancellationTokenist 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:
folderUriist eine Zeichenkette, die die URI des zu löschenden Ordners darstelltdeletePermanentlygibt an, ob der Ordner dauerhaft gelöscht oder in den Ordner "Gelöschte Elemente" verschoben werden sollcancellationTokenist 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:
- 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
cancellationTokenParameter, der optional ist und verwendet werden kann, um die asynchrone Operation abzubrechen. - Gibt das EwsUpdateItem Objekts als Parameter für die UpdateItemAsync Methode eines EWSClient.
- 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));