Operazioni email asincrone con autenticazione OAuth e client EWS
Metodo Async per Recuperare il Token OAuth
A differenza dei metodi sincroni, i metodi asincroni non bloccano e permettono di eseguire più richieste simultaneamente. I metodi asincroni sono denominati con il suffisso Async.
NOTA: I metodi async sono disponibili nelle versioni che mirano a .NET Core, .NET Framework 4.5 e successive.
Il seguente esempio di codice definisce un SomeAsyncTokenProvider classe, che implementa il IAsyncTokenProvider interfaccia. La classe implementa GetAccessTokenAsync metodo asincrono che restituisce un Task di tipo OAuthToken. Questo metodo recupera un valido OAuthToken asincronicamente.
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()
{
...
}
}
Configurazione Asincrona del Client EWS con Autenticazione OAuth
Il prossimo esempio di codice ottiene un client Exchange Web Services (EWS) in modo asincrono usando l’autenticazione OAuth. Il codice esegue i seguenti passaggi:
- Crea un nuovo CancellationToken oggetto che può essere usato per annullare operazioni asincrone.
- Istanzia
SomeAsyncTokenProviderclasse che implementa il IAsyncTokenProvider interfaccia. Questa classe è usata come parametro per costruire un nuovo OAuthNetworkCredential oggetto. - Imposta l’URI della casella di posta sul punto finale di Exchange Web Services.
- Chiama il GetEwsClientAsync metodo del EWSClient classe con il
mailboxUrieOAuthNetworkCredentialoggetto come parametri. Questo metodo restituisce un oggetto Task, quindi attende il risultato prima di continuare. IlcancellationTokenl’oggetto è passato come parametro opzionale al GetEwsClientAsync metodo.
//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);
Invia Messaggi Email
L’esempio di codice sottostante tenta di inviare un messaggio email in modo asincrono. Il codice esegue i seguenti passaggi:
- Crea un nuovo MailMessage oggetto con i parametri del messaggio.
- Chiama il SendAsync metodo del EWSClient oggetto, passando il MailMessage come parametro. Il metodo è atteso poiché restituisce un oggetto Task. Il
cancellationTokenl’oggetto è passato come parametro opzionale al SendAsync metodo.
MailMessage message = new MailMessage("from@aspose.com", "to@aspose.com", "Some subject", "Some body");
await ewsClient.SendAsync(message, cancellationToken: cancellationToken);
Recupera messaggi email
Per recuperare un messaggio email in modo asincrono, usa il seguente esempio di codice con i passaggi descritti di seguito:
-
Chiama il FetchItemAsync metodo di un EWSclient. Il metodo accetta due parametri:
messageUriè una stringa che rappresenta l’URI del messaggio da recuperarecancellationTokenè un parametro opzionale che può essere usato per annullare l’operazione asincrona. Il metodo restituisce un oggetto Task che restituisce un MapiMessage oggetto quando l’operazione asincrona è completata. La parola chiave "await" è usata per attendere il completamento dell’oggetto Task prima di procedere.
-
Assegna al
fetchedvariabile il risultato del Task completato, che è un MapiMessage oggetto contenente i dati del messaggio recuperato.var fetched = await ewsClient.FetchItemAsync(messageUri, cancellationToken: cancellationToken);
Aggiungi messaggi email
L’esempio di codice seguente tenta di aggiungere messaggi email in modo asincrono. Il codice esegue i seguenti passaggi:
-
Chiama il AppendMessagesAsync metodo di un EWSclient oggetto. Il metodo accetta un EwsAppendMessage oggetto che contiene i parametri: i messaggi da aggiungere, l’URI della cartella di destinazione e il token di cancellazione.
-
Crea il EwsAppendMessage oggetto usando il Crea metodo e lo configura con le seguenti chiamate di metodo:
- AddMessage aggiunge un messaggio all’operazione di aggiunta.
- SetFolder imposta l’URI della cartella di destinazione per l’operazione di aggiunta.
- SetCancellationToken imposta il token di cancellazione che può essere usato per annullare l’operazione asincrona.
-
Il AppendMessagesAsync Il metodo restituisce un oggetto Task che restituisce un oggetto IEnumerable
quando l’operazione asincrona è completata. La parola chiave "await" è usata per attendere il completamento dell’oggetto Task prima di procedere. -
Il
urisla variabile è assegnata al risultato del Task completato, che è un oggetto IEnumerablecontenente gli URI dei messaggi aggiunti.
IEnumerable<string> uris = await ewsClient.AppendMessagesAsync(
EwsAppendMessage.Create()
.AddMessage(message)
.AddMessage(fetched)
.SetFolder(folderUri)
.SetCancellationToken(cancellationToken));
Copia elementi
Il campione di codice seguente mostra come copiare gli elementi ed esegue i seguenti passaggi:
-
Chiama il CopyItemAsync metodo di un EWSClient oggetto. Il metodo accetta tre parametri:
messageUriè una stringa che rappresenta l’URI del messaggio da copiaredestinationFolderUriè una stringa che rappresenta l’URI della cartella di destinazionecancellationTokenè un parametro opzionale che può essere usato per annullare l’operazione asincrona.
Il metodo restituisce un oggetto Task che restituisce una stringa quando l’operazione asincrona è completata. La parola chiave "await" è usata per attendere il completamento dell’oggetto Task prima di procedere.
-
newItemUrila variabile è assegnata al risultato del Task completato, che è una stringa contenente l’URI della nuova copia del messaggio.
string newItemUri = await ewsClient.CopyItemAsync(messageUri, destinationFolderUri, cancellationToken);
Elimina elementi
Il codice seguente tenta di eliminare un messaggio email in modo asincrono.
Chiama il DeleteItemAsync metodo di un oggetto EWSClient. Il metodo accetta tre parametri:
newItemUriè una stringa che rappresenta l’URI dell’elemento da eliminareDeletionOptions.DeletePermanentlyspecifica che l’elemento deve essere eliminato definitivamentecancellationTokenè un parametro opzionale che può essere usato per annullare l’operazione asincrona.
Il metodo restituisce un oggetto Task che si completa quando l’operazione asincrona è terminata. La parola chiave "await" è usata per attendere il completamento dell’oggetto Task prima di procedere.
await ewsClient.DeleteItemAsync(newItemUri, DeletionOptions.DeletePermanently, cancellationToken);
Elimina cartelle
Il codice seguente tenta di eliminare una cartella in modo asincrono.
Chiama il DeleteFolderAsync metodo di un oggetto EWSClient. Il metodo accetta tre parametri:
folderUriè una stringa che rappresenta l’URI della cartella da eliminaredeletePermanentlyspecifica se eliminare la cartella in modo permanente o spostarla nella cartella "Posta eliminata"cancellationTokenè un parametro opzionale che può essere usato per annullare l’operazione asincrona.
Il metodo restituisce un oggetto Task che si completa quando l’operazione asincrona è terminata. La parola chiave "await" è usata per attendere il completamento dell’oggetto Task prima di procedere.
const bool deletePermanently = true;
await ewsClient.DeleteFolderAsync(folderUri, deletePermanently, cancellationToken);
Aggiorna elementi
L’esempio di codice seguente tenta di aggiornare un elemento in modo asincrono. Esegue i seguenti passaggi:
- Crea un EwsUpdateItem oggetto usando il Crea metodo, passando un oggetto item. L’EwsUpdateItem rappresenta i parametri di un’operazione di aggiornamento. Il SetCancellationToken il metodo è chiamato su EwsUpdateItem oggetto, passando il
cancellationTokenparametro, che è un parametro opzionale che può essere usato per annullare l’operazione asincrona. - Passa il EwsUpdateItem oggetto come parametro per il UpdateItemAsync metodo di un EWSClient.
- Il UpdateItemAsync Il metodo restituisce un oggetto Task che si completa quando l’operazione asincrona è terminata. La parola chiave "await" è usata per attendere il completamento dell’oggetto Task prima di procedere.
await ewsClient.UpdateItemAsync(
EwsUpdateItem.Create(mapiNote)
.SetCancellationToken(cancellationToken));