Exercício – Carregar e-mails de um usuário em lotes

Concluído

Neste exercício, você estenderá o aplicativo para permitir que você carregue emails de um usuário em lotes de 10 itens.

Carregar emails em lotes de 10 itens

Comece modificando a GraphEmailClient classe para dar suporte ao carregamento de lotes de e-mails.

  1. No editor de códigos, abra o arquivo Graph/GraphEmailClient.cs.

  2. Tire um momento para localizar o GetNextLink() método. Observe que ele aceita um objeto IUserMessagesCollectionPage chamado pagedMessages como um parâmetro. Ele usa esse o parâmetro para verificar se existe um valor de URL de solicitação de próxima página.

  3. Localize o GetUserMessagesPage() método e observe se ele aceita um parâmetro chamado nextPageLink que representa a URL do próximo lote de e-mails a ser recuperado. O método também aceita um parâmetro chamado top. GetUserMessagesPage() retorna um objeto de tupla que contém as mensagens recuperadas e a URL ao próximo lote de e-mails.

    public async Task<(IEnumerable<Message> Messages,
      string NextLink)> GetUserMessagesPage(
        string nextPageLink = null, int top = 10)
    {
    
    }
    
  4. Substitua o código existente no GetUserMessagesPage() método pelo seguinte código:

    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. Adicione o seguinte código ao try bloco.

    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();
    }
    

    Esse código realiza as seguintes verificações:

    • Se não existir nextPageLink valor, a _graphServiceClient instância injetada na classe será usada para recuperar o lote inicial de mensagens.
    • Se nextPageLink existir um valor, o código recuperará o próximo lote de e-mails passando nextPageLink e _graphServiceClient para uma nova instância deUserMessagesCollectionRequest.
  6. Salve GraphEmailClient.cs antes de continuar.

  7. Abra Pages/Email.cshtml.cs no seu editor de códigos.

  8. Substitua o código no OnGetAsync() método pelo seguinte para usar o GetUserMessagesPage() método que você modificou anteriormente:

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

  10. Abra Pages/Email.cshtml no editor de códigos e localize o código a seguir. Esse bloco de códigos lida com o armazenamento do NextLink valor da propriedade na página. À medida que o usuário seleciona o botão Próxima Página, o valor do link será passado para o servidor e usado para recuperar o próximo lote de e-mails.

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

Execute seu aplicativo

Antes de executar o aplicativo, verifique se a conta usada para entrar possui e-mails.

  1. Execute a seguinte etapa com base no seu editor de códigos:

    • Visual Studio

      Clique em F5 para compilar e executar o projeto.

    • Visual Studio Code ou outro editor de códigos

      Abra uma janela do terminal na pasta Iniciar e execute o seguinte comando:

      dotnet run
      
  2. Abra um navegador e acesse https://localhost:5001.

  3. Inicie sessão com o inquilino do programador do Microsoft 365 que utilizou anteriormente ao registar a Aplicação Microsoft Entra.

  4. Selecione o link E-mail no cabeçalho para exibir as mensagens de e-mail do usuário.

  5. Quando a página é carregada, as mensagens de e-mail do usuário serão exibidas. Se houver mais de 10 mensagens, você deverá ver o botão Próxima Página na parte inferior da página. Selecione o botão para exibir o próximo lote de mensagens de e-mails.

    Página exibindo mensagens de e-mail recuperadas do Microsoft Graph.

    Observação

    Se você não estiver vendo as mensagens de e-mails, verifique se há e-mails na caixa de entrada da conta que você usa para entrar no aplicativo.

  6. Feche seu navegador e selecione Ctrl+C na janela do terminal para interromper o servidor antes de continuar.

    Observação

    Se tiver aberto o projeto no Visual Studio você poderá fechar o navegador ou selecionar Shift+F5 no Visual Studio para parar o servidor. Feche a janela do terminal Visual Studio criada se ela ainda estiver aberta.

Você demonstrou com êxito como acessar e exibir mensagens de e-mail do Microsoft 365 para um usuário conectado usando o Microsoft Graph e o ASP.NET Core!