Упражнение. Показ сообщений электронной почты пользователя

Завершено

Давайте применим все рассмотренные ранее концепции и внесем изменения в наш пример приложения для доступа к электронной почте.

Загрузка писем из Microsoft Graph

Начните с добавления вызова к Microsoft Graph, чтобы загрузить последние 10 писем текущего пользователя.

  1. Откройте файл Startup.cs в редакторе и изучите ПО промежуточного слоя Microsoft Identity, Microsoft Graph и ASP.NET Core, определенное в ConfigureServices.

  2. Найдите следующий код в методе ConfigureServices().

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

    Этот код обеспечивает внедрение зависимостей для пользовательских объектов GraphProfileClient и GraphEmailClient. Объекты получают область для HTTP-запроса, иначе говоря, они будут создаваться один раз для каждого запроса к серверу.

  3. Откройте файл Graph/GraphEmailClient.cs и изучите существующий код. Обратите внимание на следующее:

    • В класс включены два поля readonly: _logger и _graphServiceClient. Этим полям будут назначены объекты, внедренные в конструктор.
    • Класс содержит методы GetUserMessages, GetUserMessagesPage и GetNextLink.
  4. Удалите в конструкторе существующий код.

  5. Измените конструктор: внедрите ILogger<GraphEmailClient> и GraphServiceClient и присвойте связанным полям значения параметров:

    public GraphEmailClient(
      ILogger<GraphEmailClient> logger,
      GraphServiceClient graphServiceClient)
    {
        _logger = logger;
        _graphServiceClient = graphServiceClient;
    }
    
  6. Найдите метод GetUserMessages() и замените существующий код следующими блоками кода try/catch:

    try
    {
    
    }
    catch (Exception ex)
    {
      _logger.LogError($"Error calling Graph /me/messages: { ex.Message}");
      throw;
    }
    
  7. В блоке try добавьте следующий код _graphServiceClient для получения 10 сообщений электронной почты из учетной записи пользователя. Код упорядочит результаты по свойству receivedDatetime и выберет только свойства Subject, BodyPreview и 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. Прежде чем продолжать работу, сохраните файл GraphEmailClient.cs.

  9. Откройте Pages/email.cshtml.cs и изучите существующий код. Обратите внимание на следующее:

    • Класс EmailModel содержит несколько полей и свойств, таких как _graphEmailClient, NextLink и Messages.
    • GraphCalendarClient внедряется в конструктор и назначается полю _graphEmailClient.
  10. Найдите метод OnGetAsync и замените существующий код следующим:

    Messages = await _graphEmailClient.GetUserMessages();
    

    Этот код использует объект GraphEmailClient, чтобы получить 10 сообщений электронной почты и назначить их свойству Messages.

  11. Прежде чем продолжать, сохраните файл Email.cshtml.cs.

Отображение писем в приложении

Следующий шаг — отобразить сообщения электронной почты на веб-странице.

  1. Откройте файл Email.cshtml в текстовом редакторе.

  2. Изучите код HTML и Razor и обратите внимание на то, что он обрабатывает следующие задачи:

    • Гарантирует, что пользователь прошел проверку подлинности.
    • Проверяет свойство Model.Messages, чтобы выяснить, есть ли сообщения электронной почты для циклической обработки и отображения на странице.
  3. Найдите в файле комментарий @* Add foreach here *@ и замените его следующим кодом:

    @foreach(var message in Model.Messages)
    {
    
  4. Найдите комментарий @* Add foreach closing bracket here *@ и замените его закрывающей скобкой для оператора foreach, добавленного на предыдущем шаге.

  5. Найдите комментарий @* Add message subject here *@ и замените его следующим кодом для извлечения темы каждого сообщения:

    @message.Subject
    
  6. Найдите комментарий @* Add message received date/time here *@ и замените его следующим кодом для извлечения даты и времени начала события:

    @message.ReceivedDateTime.GetValueOrDefault().UtcDateTime
    
  7. Наконец, найдите комментарий @* Add message body preview here *@ и замените его на следующий код, для извлечения предварительного просмотра текста сообщения:

    @message.BodyPreview
    
  8. Прежде чем продолжать работу, сохраните файл Email.cshtml.

Запуск приложения

Перед запуском приложения убедитесь, что у учетной записи, используемой для входов, есть хотя бы одно сообщение электронной почты. Пора запустить приложение и опробовать его!

  1. Выполните следующий шаг в зависимости от используемого редактора кода:

    • Visual Studio

      Нажмите клавишу F5, чтобы выполнить сборку и запуск проекта.

    • Visual Studio Code или другой редактор кода

      Откройте окно терминала в папке Begin и запустите указанную ниже команду.

      dotnet run
      
  2. Откройте браузер и перейдите по адресу https://localhost:5001.

  3. Войдите с помощью клиента разработчика Microsoft 365, который использовался ранее при регистрации приложения Microsoft Entra.

  4. Выберите ссылку Электронная почта в верхнем колонтитуле для просмотра сообщений электронной почты пользователя.

  5. После загрузки страницы выполняется запрос GET в конечную точку Microsoft Graph /me/messages, и маркер доступа передается в верхнем колонтитуле авторизации. Затем вызов /me/messages безопасно извлекает данные из службы и отображает их на странице.

    Страница с сообщениями электронной почты, извлеченными из Microsoft Graph.

    Примечание.

    Если не видно ни одного сообщения электронной почты, убедитесь, что в почтовом ящике учетной записи, использованной для входа в приложение, есть сообщения электронной почты.

  6. Прежде чем продолжать работу, закройте браузер и нажмите CTRL+C в окне терминала, чтобы остановить сервер.

    Примечание.

    Если вы открыли проект в Visual Studio, можете закрыть браузер или нажать Shift+F5 в Visual Studio, чтобы остановить сервер. Закройте созданное окно терминала Visual Studio, если оно еще открыто.

Вы успешно проработали пример получения доступа к сообщениям электронной почты в Microsoft 365 с помощью Microsoft Graph и ASP.NET Core для пользователя, вошедшего в систему!