Ejercicio: Carga de correos electrónicos de un usuario en lotes

Completado

En este ejercicio, ampliará la aplicación para que pueda cargar los correos electrónicos de un usuario en lotes de 10 elementos.

Cargar correos electrónicos en lotes de 10 elementos

Para empezar, modifique la clase GraphEmailClient para admitir la carga de lotes de correos electrónicos.

  1. En el editor de código, abra el archivoGraph/GraphEmailClient.cs.

  2. Dedique un momento a localizar el GetNextLink()método. Observe que acepta un objeto IUserMessagesCollectionPage denominado pagedMessages como parámetro. Usa este parámetro para comprobar si existe un valor de dirección URL de solicitud de página siguiente.

  3. Busque el GetUserMessagesPage()método y observe que acepta un parámetro denominado nextPageLink que representa la dirección URL del siguiente lote de correos electrónicos que se va a recuperar. El método también acepta un parámetro denominado top. GetUserMessagesPage() devuelve un objeto de tupla que contiene los mensajes recuperados y la dirección URL del siguiente lote de correos electrónicos.

    public async Task<(IEnumerable<Message> Messages,
      string NextLink)> GetUserMessagesPage(
        string nextPageLink = null, int top = 10)
    {
    
    }
    
  4. Reemplace el código existente en el GetUserMessagesPage()método con el código siguiente:

    IUserMessagesCollectionPage pagedMessages;
    
    try
    {
    }
    catch (Exception ex)
    {
      _logger.LogError($"Error calling Graph /me/messages to page messages: {ex.Message}");
      throw;
    }
    
    return (Messages: pagedMessages,
            NextLink: GetNextLink(pagedMessages));
    
  5. Agregue el código siguiente al try bloque.

    if (nextPageLink == null)
    {
      // Get initial page of messages
      pagedMessages = await _graphServiceClient.Me.Messages
              .Request()
              .Select(msg => new
              {
                  msg.Subject,
                  msg.BodyPreview,
                  msg.ReceivedDateTime
              })
              .Top(top)
              .OrderBy("receivedDateTime desc")
              .GetAsync();
    }
    else
    {
      // Use the next page request URI value to get the page of messages
      var messagesCollectionRequest = new UserMessagesCollectionRequest(nextPageLink, _graphServiceClient, null);
      pagedMessages = await messagesCollectionRequest.GetAsync();
    }
    

    Este código realiza las siguientes comprobaciones:

    • Si no existe ningún valor de nextPageLink, la instancia de _graphServiceClientinsertada en la clase se usa para recuperar el lote inicial de mensajes.
    • Si existe un valor denextPageLink, el código recupera el siguiente lote de correos electrónicos pasando nextPageLink y _graphServiceClient a una nueva instancia de UserMessagesCollectionRequest.
  6. Guarde GraphEmailClient.cs antes de continuar.

  7. Abra Pages/Email.cshtml.cs en el editor de código.

  8. Reemplace el código del método OnGetAsync() por lo siguiente para usar el método GetUserMessagesPage() que modificó anteriormente:

    var messagesPagingData = await _graphEmailClient.GetUserMessagesPage(NextLink);
    Messages = messagesPagingData.Messages;
    NextLink = messagesPagingData.NextLink;
    await Task.CompletedTask;
    
  9. Guarde Email.cshtml.cs antes de continuar.

  10. Abra Pages/Email.cshtml en el editor de código y busque el código siguiente. Este bloque de código controla el almacenamiento del valor de propiedadNextLinken la página. Cuando el usuario selecciona el botón Next page, el valor del vínculo se pasará al servidor y se usará para recuperar el siguiente lote de correos electrónicos.

    @if (!String.IsNullOrEmpty(Model.NextLink)) {
        <a asp-page="/Email" asp-route-nextlink="@Model.NextLink"
          class="btn btn-primary">Next Page</a>
    }
    

Ejecutar la aplicación

Antes de ejecutar la aplicación, asegúrese de que la cuenta usada para iniciar sesión contiene algunos correos electrónicos.

  1. Realice el siguiente paso en función del editor de código:

    • Visual Studio

      Pulse F5 para compilar y ejecutar el proyecto.

    • Visual Studio Code u otro editor de código

      Abra una ventana de terminal en la carpeta Begin y ejecute el siguiente comando:

      dotnet run
      
  2. Abra un explorador y visite https://localhost:5001.

  3. Inicie sesión con el inquilino para desarrolladores de Microsoft 365 que usó anteriormente al registrar la aplicación Microsoft Entra.

  4. Seleccione el vínculo Email en el encabezado para ver los mensajes de correo electrónico del usuario.

  5. Cuando se cargue la página, se mostrarán los mensajes de correo electrónico del usuario. Si hay más de 10 mensajes, debería ver un botón Next Page en la parte inferior de la página. Seleccione el botón para ver el siguiente lote de mensajes de correo electrónico.

    Página que muestra los mensajes de correo electrónico recuperados de Microsoft Graph.

    Nota:

    Si no ve ningún mensaje de correo electrónico, asegúrese de que hay correos electrónicos en la bandeja de entrada de la cuenta que usa para iniciar sesión en la aplicación.

  6. Cierre el explorador y presione Ctrl+C en la ventana de terminal para detener el servidor antes de continuar.

    Nota:

    Si ha abierto el proyecto en Visual Studio, puede cerrar el explorador o seleccionar Mayús+F5 en Visual Studio para detener el servidor. Cierre la ventana de terminal Visual Studio crea si sigue abierta.

Ha demostrado con éxito cómo acceder y mostrar los mensajes de correo electrónico de Microsoft 365 para un usuario registrado usando Microsoft Graph y ASP.NET Core.