Упражнение — пакетная загрузка сообщений электронной почты пользователя
В этом упражнении вы расширите приложение, чтобы загружать письма пользователя блоками по 10 штук.
Загрузка писем блоками по 10 штук
Для начала мы изменим класс GraphEmailClient
, чтобы он поддерживал загрузку электронных писем блоками.
В редакторе кода откройте файл Graph/GraphEmailClient.cs.
Найдите метод
GetNextLink()
. Обратите внимание, что он принимает в качестве параметра объект IUserMessagesCollectionPage с именемpagedMessages
. Он использует этот параметр, чтобы проверить, существует ли значение URL-адреса запроса следующей страницы.Найдите метод
GetUserMessagesPage()
и обратите внимание, что он принимает параметр с именемnextPageLink
, представляющий собой URL-адрес следующей партии электронных писем, которая должна быть получена. Этот метод также принимает параметр с именемtop
.GetUserMessagesPage()
возвращает объект-кортеж, содержащий извлеченные сообщения и URL-адрес следующей партии сообщений.public async Task<(IEnumerable<Message> Messages, string NextLink)> GetUserMessagesPage( string nextPageLink = null, int top = 10) { }
Замените весь код в методе
GetUserMessagesPage()
следующим кодом: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));
Добавьте следующий код в блок
try
.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(); }
Этот код выполняет следующие действия:
- Если значения
nextPageLink
не существует, для получения начальной партии сообщений используется экземпляр_graphServiceClient
, внедренный в класс. - Если значение
nextPageLink
существует, код извлекает следующую партию электронных писем путем передачиnextPageLink
и_graphServiceClient
в новый экземплярUserMessagesCollectionRequest
.
- Если значения
Прежде чем продолжить работу, сохраните GraphEmailClient.cs.
Откройте Pages/Email.cshtml.cs в редакторе кода.
Замените код в методе
OnGetAsync()
следующим, чтобы использовать измененный ранее методGetUserMessagesPage()
:var messagesPagingData = await _graphEmailClient.GetUserMessagesPage(NextLink); Messages = messagesPagingData.Messages; NextLink = messagesPagingData.NextLink; await Task.CompletedTask;
Прежде чем продолжить работу, сохраните Email.cshtml.cs.
Откройте Pages/Email.cshtml в редакторе кода и найдите следующий код. Этот блок кода обрабатывает хранение значения свойства
NextLink
на странице. Когда пользователь нажимает кнопку Следующая страница, значение ссылки передается на сервер и используется для получения следующей партии электронных писем.@if (!String.IsNullOrEmpty(Model.NextLink)) { <a asp-page="/Email" asp-route-nextlink="@Model.NextLink" class="btn btn-primary">Next Page</a> }
Запуск приложения
Перед запуском приложения убедитесь, что у учетной записи, используемой для входов, есть хотя бы одно сообщение электронной почты.
Выполните следующий шаг в зависимости от используемого редактора кода:
Visual Studio
Нажмите клавишу F5, чтобы выполнить сборку и запуск проекта.
Visual Studio Code или другой редактор кода
Откройте окно терминала в папке Begin и запустите указанную ниже команду.
dotnet run
Откройте браузер и перейдите по адресу
https://localhost:5001
.Войдите с помощью клиента разработчика Microsoft 365, который использовался ранее при регистрации приложения Microsoft Entra.
Выберите ссылку Электронная почта в верхнем колонтитуле для просмотра сообщений электронной почты пользователя.
После загрузки страницы вы увидите сообщения электронной почты пользователя. Если сообщений больше 10, в нижней части страницы должна появиться кнопка Следующая страница. Нажмите эту кнопку для просмотра следующей партии сообщений электронной почты.
Примечание.
Если не видно ни одного сообщения электронной почты, убедитесь, что в почтовом ящике учетной записи, использованной для входа в приложение, есть сообщения электронной почты.
Прежде чем продолжать работу, закройте браузер и нажмите Ctrl+C в окне терминала, чтобы остановить сервер.
Примечание.
Если вы открыли проект в Visual Studio, можете закрыть браузер или нажать Shift+F5 в Visual Studio, чтобы остановить сервер. Закройте созданное окно терминала Visual Studio, если оно еще открыто.
Вы успешно проработали пример получения доступа к сообщениям электронной почты в Microsoft 365 с помощью Microsoft Graph и ASP.NET Core для пользователя, вошедшего в систему!