Упражнение. Показ сообщений электронной почты пользователя
Давайте применим все рассмотренные ранее концепции и внесем изменения в наш пример приложения для доступа к электронной почте.
Загрузка писем из Microsoft Graph
Начните с добавления вызова к Microsoft Graph, чтобы загрузить последние 10 писем текущего пользователя.
Откройте файл Startup.cs в редакторе и изучите ПО промежуточного слоя Microsoft Identity, Microsoft Graph и ASP.NET Core, определенное в
ConfigureServices
.Найдите следующий код в методе
ConfigureServices()
.services.AddScoped<GraphProfileClient>(); services.AddScoped<GraphEmailClient>();
Этот код обеспечивает внедрение зависимостей для пользовательских объектов GraphProfileClient и GraphEmailClient. Объекты получают область для HTTP-запроса, иначе говоря, они будут создаваться один раз для каждого запроса к серверу.
Откройте файл Graph/GraphEmailClient.cs и изучите существующий код. Обратите внимание на следующее:
- В класс включены два поля
readonly
:_logger
и_graphServiceClient
. Этим полям будут назначены объекты, внедренные в конструктор. - Класс содержит методы
GetUserMessages
,GetUserMessagesPage
иGetNextLink
.
- В класс включены два поля
Удалите в конструкторе существующий код.
Измените конструктор: внедрите
ILogger<GraphEmailClient>
иGraphServiceClient
и присвойте связанным полям значения параметров:public GraphEmailClient( ILogger<GraphEmailClient> logger, GraphServiceClient graphServiceClient) { _logger = logger; _graphServiceClient = graphServiceClient; }
Найдите метод
GetUserMessages()
и замените существующий код следующими блоками кодаtry/catch
:try { } catch (Exception ex) { _logger.LogError($"Error calling Graph /me/messages: { ex.Message}"); throw; }
В блоке
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;
Прежде чем продолжать работу, сохраните файл GraphEmailClient.cs.
Откройте Pages/email.cshtml.cs и изучите существующий код. Обратите внимание на следующее:
- Класс
EmailModel
содержит несколько полей и свойств, таких как_graphEmailClient
,NextLink
иMessages
. -
GraphCalendarClient
внедряется в конструктор и назначается полю_graphEmailClient
.
- Класс
Найдите метод
OnGetAsync
и замените существующий код следующим:Messages = await _graphEmailClient.GetUserMessages();
Этот код использует объект GraphEmailClient, чтобы получить 10 сообщений электронной почты и назначить их свойству
Messages
.Прежде чем продолжать, сохраните файл Email.cshtml.cs.
Отображение писем в приложении
Следующий шаг — отобразить сообщения электронной почты на веб-странице.
Откройте файл Email.cshtml в текстовом редакторе.
Изучите код HTML и Razor и обратите внимание на то, что он обрабатывает следующие задачи:
- Гарантирует, что пользователь прошел проверку подлинности.
- Проверяет свойство
Model.Messages
, чтобы выяснить, есть ли сообщения электронной почты для циклической обработки и отображения на странице.
Найдите в файле комментарий
@* Add foreach here *@
и замените его следующим кодом:@foreach(var message in Model.Messages) {
Найдите комментарий
@* Add foreach closing bracket here *@
и замените его закрывающей скобкой для оператораforeach
, добавленного на предыдущем шаге.Найдите комментарий
@* Add message subject here *@
и замените его следующим кодом для извлечения темы каждого сообщения:@message.Subject
Найдите комментарий
@* Add message received date/time here *@
и замените его следующим кодом для извлечения даты и времени начала события:@message.ReceivedDateTime.GetValueOrDefault().UtcDateTime
Наконец, найдите комментарий
@* Add message body preview here *@
и замените его на следующий код, для извлечения предварительного просмотра текста сообщения:@message.BodyPreview
Прежде чем продолжать работу, сохраните файл Email.cshtml.
Запуск приложения
Перед запуском приложения убедитесь, что у учетной записи, используемой для входов, есть хотя бы одно сообщение электронной почты. Пора запустить приложение и опробовать его!
Выполните следующий шаг в зависимости от используемого редактора кода:
Visual Studio
Нажмите клавишу F5, чтобы выполнить сборку и запуск проекта.
Visual Studio Code или другой редактор кода
Откройте окно терминала в папке Begin и запустите указанную ниже команду.
dotnet run
Откройте браузер и перейдите по адресу
https://localhost:5001
.Войдите с помощью клиента разработчика Microsoft 365, который использовался ранее при регистрации приложения Microsoft Entra.
Выберите ссылку Электронная почта в верхнем колонтитуле для просмотра сообщений электронной почты пользователя.
После загрузки страницы выполняется запрос GET в конечную точку Microsoft Graph
/me/messages
, и маркер доступа передается в верхнем колонтитуле авторизации. Затем вызов/me/messages
безопасно извлекает данные из службы и отображает их на странице.Примечание.
Если не видно ни одного сообщения электронной почты, убедитесь, что в почтовом ящике учетной записи, использованной для входа в приложение, есть сообщения электронной почты.
Прежде чем продолжать работу, закройте браузер и нажмите CTRL+C в окне терминала, чтобы остановить сервер.
Примечание.
Если вы открыли проект в Visual Studio, можете закрыть браузер или нажать Shift+F5 в Visual Studio, чтобы остановить сервер. Закройте созданное окно терминала Visual Studio, если оно еще открыто.
Вы успешно проработали пример получения доступа к сообщениям электронной почты в Microsoft 365 с помощью Microsoft Graph и ASP.NET Core для пользователя, вошедшего в систему!