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:

  1. Crea un nuovo CancellationToken oggetto che può essere usato per annullare operazioni asincrone.
  2. Istanzia SomeAsyncTokenProvider classe che implementa il IAsyncTokenProvider interfaccia. Questa classe è usata come parametro per costruire un nuovo OAuthNetworkCredential oggetto.
  3. Imposta l’URI della casella di posta sul punto finale di Exchange Web Services.
  4. Chiama il GetEwsClientAsync metodo del EWSClient classe con il mailboxUri e OAuthNetworkCredential oggetto come parametri. Questo metodo restituisce un oggetto Task, quindi attende il risultato prima di continuare. Il cancellationToken l’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:

  1. Crea un nuovo MailMessage oggetto con i parametri del messaggio.
  2. Chiama il SendAsync metodo del EWSClient oggetto, passando il MailMessage come parametro. Il metodo è atteso poiché restituisce un oggetto Task. Il cancellationToken l’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:

  1. Chiama il FetchItemAsync metodo di un EWSclient. Il metodo accetta due parametri:

    • messageUri è una stringa che rappresenta l’URI del messaggio da recuperare
    • cancellationToken è 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.
  2. Assegna al fetched variabile 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:

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

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

  4. Il uris la variabile è assegnata al risultato del Task completato, che è un oggetto IEnumerable contenente 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:

  1. Chiama il CopyItemAsync metodo di un EWSClient oggetto. Il metodo accetta tre parametri:

    • messageUri è una stringa che rappresenta l’URI del messaggio da copiare
    • destinationFolderUri è una stringa che rappresenta l’URI della cartella di destinazione
    • cancellationToken è 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.

  2. newItemUri la 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 eliminare
  • DeletionOptions.DeletePermanently specifica che l’elemento deve essere eliminato definitivamente
  • 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.

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 eliminare
  • deletePermanently specifica 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:

  1. 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 cancellationToken parametro, che è un parametro opzionale che può essere usato per annullare l’operazione asincrona.
  2. Passa il EwsUpdateItem oggetto come parametro per il UpdateItemAsync metodo di un EWSClient.
  3. 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));