Exercício – Carregar e-mails de um usuário em lotes
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.
No editor de códigos, abra o arquivo Graph/GraphEmailClient.cs.
Tire um momento para localizar o
GetNextLink()
método. Observe que ele aceita um objeto IUserMessagesCollectionPage chamadopagedMessages
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.Localize o
GetUserMessagesPage()
método e observe se ele aceita um parâmetro chamadonextPageLink
que representa a URL do próximo lote de e-mails a ser recuperado. O método também aceita um parâmetro chamadotop
.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) { }
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));
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 passandonextPageLink
e_graphServiceClient
para uma nova instância deUserMessagesCollectionRequest
.
- Se não existir
Salve GraphEmailClient.cs antes de continuar.
Abra Pages/Email.cshtml.cs no seu editor de códigos.
Substitua o código no
OnGetAsync()
método pelo seguinte para usar oGetUserMessagesPage()
método que você modificou anteriormente:var messagesPagingData = await _graphEmailClient.GetUserMessagesPage(NextLink); Messages = messagesPagingData.Messages; NextLink = messagesPagingData.NextLink; await Task.CompletedTask;
Salve Email.cshtml.cs antes de continuar.
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.
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
Abra um navegador e acesse
https://localhost:5001
.Inicie sessão com o inquilino do programador do Microsoft 365 que utilizou anteriormente ao registar a Aplicação Microsoft Entra.
Selecione o link E-mail no cabeçalho para exibir as mensagens de e-mail do usuário.
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.
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.
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!