Operaciones de correo electrónico asíncronas con autenticación OAuth y cliente EWS

Método async para obtener token OAuth

A diferencia de los métodos síncronos, los métodos asíncronos no bloquean y permiten realizar múltiples solicitudes simultáneamente. Los métodos asíncronos llevan el sufijo Async.

NOTA: Los métodos async están disponibles en versiones dirigidas a .NET Core, .NET Framework 4.5 y posteriores.

El siguiente ejemplo de código define un SomeAsyncTokenProvider clase, que implementa el IAsyncTokenProvider interfaz. La clase implementa GetAccessTokenAsync método asíncrono que devuelve una Task de tipo OAuthToken. Este método obtiene un token válido OAuthToken de forma asíncrona.

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

Configuración del cliente EWS asíncrono con autenticación OAuth

El siguiente ejemplo de código obtiene un cliente de Exchange Web Services (EWS) de forma asíncrona usando autenticación OAuth. El código realiza los siguientes pasos:

  1. Crea un nuevo CancellationToken objeto que puede usarse para cancelar operaciones asíncronas.
  2. Instancia SomeAsyncTokenProvider clase que implementa el IAsyncTokenProvider interfaz. Esta clase se usa como parámetro para construir un nuevo OAuthNetworkCredential objeto.
  3. Establece la URI del buzón al punto final de Exchange Web Services.
  4. Llama al GetEwsClientAsync método del EWSClient clase con el mailboxUri y OAuthNetworkCredential objeto como parámetros. Este método devuelve un objeto Task, por lo que espera el resultado antes de continuar. El cancellationToken el objeto se pasa como parámetro opcional al GetEwsClientAsync método.
//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);

Enviar mensajes de correo electrónico

El ejemplo de código a continuación intenta enviar un mensaje de correo electrónico de forma asíncrona. El código realiza los siguientes pasos:

  1. Crea un nuevo MailMessage objeto con los parámetros del mensaje.
  2. Llama al SendAsync método del EWSClient objeto, pasando el MailMessage como parámetro. El método se aguarda ya que devuelve un objeto Task. El cancellationToken el objeto se pasa como parámetro opcional al SendAsync método.
MailMessage message = new MailMessage("from@aspose.com", "to@aspose.com", "Some subject", "Some body");
await ewsClient.SendAsync(message, cancellationToken: cancellationToken);

Obtener mensajes de correo electrónico

Para obtener un mensaje de correo electrónico de forma asíncrona, usa el siguiente ejemplo de código con los pasos descritos a continuación:

  1. Llame al FetchItemAsync método de un EWSclient. El método recibe dos parámetros:

    • messageUri es una cadena que representa el URI del mensaje a obtener
    • cancellationToken es un parámetro opcional que puede usarse para cancelar la operación asíncrona. El método devuelve un objeto Task que se resuelve en un MapiMessage objeto cuando la operación asíncrona finaliza. La palabra clave "await" se usa para esperar a que el objeto Task termine antes de continuar.
  2. Asignar al fetched variable el resultado del Task completado, que es un MapiMessage objeto que contiene los datos del mensaje recuperado.

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

Añadir mensajes de correo electrónico

El ejemplo de código a continuación intenta añadir mensajes de correo electrónico de forma asíncrona. El código realiza los siguientes pasos:

  1. Llama al AppendMessagesAsync método de un EWSclient objeto. El método recibe un EwsAppendMessage objeto que contiene los parámetros: los mensajes a añadir, el URI de la carpeta de destino y el token de cancelación.

  2. Crea el EwsAppendMessage objeto usando el Create método y lo configura con las siguientes llamadas de método:

    • AddMessage añade un mensaje a la operación de añadir.
    • SetFolder establece el URI de la carpeta de destino para la operación de añadir.
    • SetCancellationToken establece el token de cancelación que puede usarse para cancelar la operación asíncrona.
  3. El AppendMessagesAsync El método devuelve un objeto Task que se resuelve en un objeto IEnumerable cuando la operación asíncrona finaliza. La palabra clave "await" se usa para esperar a que el objeto Task termine antes de continuar.

  4. El uris la variable recibe el resultado del Task completado, que es un objeto IEnumerable que contiene los URIs de los mensajes añadidos.

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

Copiar elementos

El siguiente ejemplo de código muestra cómo copiar elementos y realiza los siguientes pasos:

  1. Llama al CopyItemAsync método de un EWSClient objeto. El método recibe tres parámetros:

    • messageUri es una cadena que representa el URI del mensaje a copiar
    • destinationFolderUri es una cadena que representa el URI de la carpeta de destino
    • cancellationToken es un parámetro opcional que puede usarse para cancelar la operación asíncrona.

    El método devuelve un objeto Task que se resuelve en una cadena cuando la operación asíncrona finaliza. La palabra clave "await" se usa para esperar a que el objeto Task termine antes de continuar.

  2. newItemUri la variable recibe el resultado del Task completado, que es una cadena que contiene el URI de la copia recién creada del mensaje.

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

Eliminar elementos

El siguiente código intenta eliminar un mensaje de correo electrónico de forma asíncrona.

Llama al DeleteItemAsync método de un objeto EWSClient. El método recibe tres parámetros:

  • newItemUri es una cadena que representa el URI del elemento a eliminar
  • DeletionOptions.DeletePermanently especifica que el elemento debe eliminarse permanentemente
  • cancellationToken es un parámetro opcional que puede usarse para cancelar la operación asíncrona.

El método devuelve un objeto Task que se completa cuando la operación asíncrona finaliza. La palabra clave "await" se usa para esperar a que el objeto Task termine antes de continuar.

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

Eliminar carpetas

El siguiente código intenta eliminar una carpeta de forma asíncrona.

Llama al DeleteFolderAsync método de un objeto EWSClient. El método recibe tres parámetros:

  • folderUri es una cadena que representa el URI de la carpeta a eliminar
  • deletePermanently especifica si eliminar la carpeta permanentemente o moverla a la carpeta "Elementos eliminados"
  • cancellationToken es un parámetro opcional que puede usarse para cancelar la operación asíncrona.

El método devuelve un objeto Task que se completa cuando la operación asíncrona finaliza. La palabra clave "await" se usa para esperar a que el objeto Task termine antes de continuar.

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

Actualizar elementos

El ejemplo de código a continuación intenta actualizar un elemento de forma asíncrona. Realiza los siguientes pasos:

  1. Crea un EwsUpdateItem objeto usando el Create método, pasando un objeto de elemento. EwsUpdateItem representa los parámetros de una operación de actualización. El SetCancellationToken método se llama sobre el EwsUpdateItem objeto, pasando el cancellationToken parámetro, que es opcional y puede usarse para cancelar la operación asíncrona.
  2. Pasa el EwsUpdateItem objeto como parámetro para el UpdateItemAsync método de un EWSClient.
  3. El UpdateItemAsync el método devuelve un objeto Task que se completa cuando la operación asíncrona finaliza. La palabra clave "await" se usa para esperar a que el objeto Task termine antes de continuar.
await ewsClient.UpdateItemAsync(
    EwsUpdateItem.Create(mapiNote)
        .SetCancellationToken(cancellationToken));