Exercício – Mostrar os e-mails de um usuário

Concluído

Vamos usar todos os conceitos discutidos até esse ponto e fazer alterações no aplicativo de exemplo para acessar os emails dos usuários.

Carregar emails de Microsoft Graph

Comece adicionando uma chamada Microsoft Graph para carregar os últimos 10 emails do usuário atual.

  1. Abra Startup.cs em seu editor e reserve um momento para explorar Microsoft Identity, Microsoft Graph e middleware do ASP.NET Core definido em ConfigureServices.

  2. Localize o seguinte código no método ConfigureServices().

    services.AddScoped<GraphProfileClient>();
    services.AddScoped<GraphEmailClient>();
    

    Esse código habilita a injeção de dependência para objetos personalizados chamados GraphProfileClient e GraphEmailClient. Os objetos têm como escopo a solicitação HTTP, o que significa que serão criados uma vez por solicitação para o servidor.

  3. Abra Graph/GraphEmailClient.cs e reserve um momento para explorar o código existente. Observe os seguintes recursos:

    • Dois campos readonly denominados _logger e _graphServiceClient estão incluídos na classe. Os objetos injetados no construtor serão atribuídos a esses campos.
    • A classe contém os métodos GetUserMessages, GetUserMessagesPage e GetNextLink.
  4. Remova o código existente no construtor.

  5. Modifique o construtor para injetar ILogger<GraphEmailClient> e GraphServiceClient, e atribua os valores de parâmetro aos campos associados:

    public GraphEmailClient(
      ILogger<GraphEmailClient> logger,
      GraphServiceClient graphServiceClient)
    {
        _logger = logger;
        _graphServiceClient = graphServiceClient;
    }
    
  6. Localize o método GetUserMessages() e substitua o código existente pelos seguintes blocos de código try/catch:

    try
    {
    
    }
    catch (Exception ex)
    {
      _logger.LogError($"Error calling Graph /me/messages: { ex.Message}");
      throw;
    }
    
  7. No bloco try, adicione o seguinte código para usar _graphServiceClient para recuperar 10 mensagens de email da conta do usuário. O código ordenará os resultados pela propriedade receivedDatetime e selecionará apenas as propriedades Subject, BodyPreview e ReceivedDateTime.

    var emails = await _graphServiceClient.Me.Messages
                .Request()
                .Select(msg => new
                {
                    msg.Subject,
                    msg.BodyPreview,
                    msg.ReceivedDateTime
                })
                .OrderBy("receivedDateTime desc")
                .Top(10)
                .GetAsync();
    return emails.CurrentPage;
    
  8. Salve o arquivo GraphEmailClient.cs antes de continuar.

  9. Abra Pages/Email.cshtml.cs e reserve um momento para explorar o código existente. Observe os seguintes recursos:

    • A classe EmailModel contém vários campos e propriedades como _graphEmailClient, NextLink e Messages.
    • GraphCalendarClient é injetado no construtor e atribuído ao campo _graphEmailClient.
  10. Localize o método OnGetAsync e substitua o código existente pelo seguinte código:

    Messages = await _graphEmailClient.GetUserMessages();
    

    Esse código usa o objeto GraphEmailClientMessages para recuperar 10 mensagens de email e as atribui à propriedade .

  11. Salve o arquivo Email.cshtml.cs antes de continuar.

Exibir emails no aplicativo

A próxima etapa é mostrar os emails na página da Web.

  1. Abra o arquivo Email.cshtml no seu editor.

  2. Reserve um momento para examinar o código HTML Razor e observar que ele lida com as seguintes tarefas:

    • Garante que o usuário seja autenticado.
    • Verifica a propriedade Model.Messages para ver se há mensagens de email para iterar e exibir na página.
  3. Localize o comentário @* Add foreach here *@ no arquivo e substitua-o pelo seguinte código:

    @foreach(var message in Model.Messages)
    {
    
  4. Localize o comentário @* Add foreach closing bracket here *@ e substitua-o por um colchete de fechamento para a instrução foreach adicionada na etapa anterior.

  5. Localize o comentário @* Add message subject here *@ e substitua-o pelo seguinte código para gravar o assunto de cada mensagem:

    @message.Subject
    
  6. Localize o comentário @* Add message received date/time here *@ e substitua-o pelo código a seguir para gravar a data e a hora de início do evento:

    @message.ReceivedDateTime.GetValueOrDefault().UtcDateTime
    
  7. Por fim, localize o comentário @* Add message body preview here *@ e substitua-o pelo seguinte código para gravar uma visualização do corpo da mensagem:

    @message.BodyPreview
    
  8. Salve o arquivo Email.cshtml antes de continuar.

Execute seu aplicativo

Antes de executar o aplicativo, verifique se a conta usada para entrar contém alguns emails. É hora de executar seu aplicativo e experimentá-lo!

  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 Email no cabeçalho para exibir as mensagens de email do usuário.

  5. Depois que a página é carregada, uma solicitação GET é feita para o ponto de extremidade /me/messages do Microsoft Graph e o token de acesso é passado no Cabeçalho de Autorização. A chamada para /me/messages recuperará os dados com segurança do serviço e os exibirá na página.

    Página da Web exibindo mensagens de email 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 o navegador e clique em 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!