Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описано, как расширить приложение, созданное в разделе Создание приложений Python, с помощью Microsoft Graph с помощью API почты Microsoft Graph. Вы используете Microsoft Graph для вывода списка папки "Входящие" пользователя и отправки сообщения электронной почты.
Перечисление папки "Входящие" пользователя
Начните с перечисления сообщений в почтовом ящике пользователя.
Добавьте следующую функцию в graph.py.
async def get_inbox(self): query_params = MessagesRequestBuilder.MessagesRequestBuilderGetQueryParameters( # Only request specific properties select=['from', 'isRead', 'receivedDateTime', 'subject'], # Get at most 25 results top=25, # Sort by received time, newest first orderby=['receivedDateTime DESC'] ) request_config = MessagesRequestBuilder.MessagesRequestBuilderGetRequestConfiguration( query_parameters= query_params ) messages = await self.user_client.me.mail_folders.by_mail_folder_id('inbox').messages.get( request_configuration=request_config) return messagesЗамените пустую
list_inboxфункцию в main.py на следующую.async def list_inbox(graph: Graph): message_page = await graph.get_inbox() if message_page and message_page.value: # Output each message's details for message in message_page.value: print('Message:', message.subject) if ( message.from_ and message.from_.email_address ): print(' From:', message.from_.email_address.name or 'NONE') else: print(' From: NONE') print(' Status:', 'Read' if message.is_read else 'Unread') print(' Received:', message.received_date_time) # If @odata.nextLink is present more_available = message_page.odata_next_link is not None print('\nMore messages available?', more_available, '\n')Запустите приложение, войдите в систему и выберите вариант 2, чтобы получить список папки "Входящие".
Please choose one of the following options: 0. Exit 1. Display access token 2. List my inbox 3. Send mail 4. Make a Graph call 2 Message: Updates from Ask HR and other communities From: Contoso Demo on Yammer Status: Read Received: 2022-04-26T19:19:05Z Message: Employee Initiative Thoughts From: Patti Fernandez Status: Read Received: 2022-04-25T19:43:57Z Message: Voice Mail (11 seconds) From: Alex Wilber Status: Unread Received: 2022-04-22T19:43:23Z Message: Our Spring Blog Update From: Alex Wilber Status: Unread Received: 2022-04-19T22:19:02Z Message: Atlanta Flight Reservation From: Alex Wilber Status: Unread Received: 2022-04-19T15:15:56Z Message: Atlanta Trip Itinerary - down time From: Alex Wilber Status: Unread Received: 2022-04-18T14:24:16Z ... More messages available? True
get_inbox описано
Рассмотрим код в get_inbox функции.
Доступ к известным почтовым папкам
Функция создает запрос к API списка сообщений . Так как он включает построитель mail_folders.by_mail_folder_id('inbox') запросов, API возвращает только сообщения в запрошенной папке почты. В этом случае, так как папка "Входящие" является хорошо известной папкой по умолчанию в почтовом ящике пользователя, она доступна по известному имени. Доступ к папкам без изменений можно получить таким же образом, заменив известное имя свойством идентификатора почтовой папки. Дополнительные сведения о доступных известных именах папок см. в разделе Тип ресурса mailFolder.
Доступ к коллекции
get_user В отличие от функции из предыдущего раздела, которая возвращает один объект, этот метод возвращает коллекцию сообщений. Большинство API в Microsoft Graph, возвращающих коллекцию, не возвращают все доступные результаты в одном ответе. Вместо этого они используют разбиение на страницы для возврата части результатов, предоставляя метод для клиентов, чтобы запросить следующую страницу.
Размеры страниц по умолчанию
API, использующие разбиение на страницы, реализуют размер страницы по умолчанию. Для сообщений значение по умолчанию — 10. Клиенты могут запрашивать больше (или меньше) с помощью параметра запроса $top . В get_inboxдобавление $top выполняется с top помощью параметра в объекте MessagesRequestBuilderGetQueryParameters .
Примечание.
Переданное значение $top является верхней границей, а не явным числом. API возвращает количество сообщений до указанного значения.
Получение последующих страниц
Если на сервере доступно больше результатов, ответы коллекции содержат @odata.nextLink свойство с URL-адресом API для доступа к следующей странице. Пакет SDK для Python предоставляет odata_next_link свойство для объектов страницы коллекции. Если это свойство присутствует, доступны дополнительные результаты.
Сортировка коллекций
Функция использует параметр запроса $orderby для запроса результатов, отсортированных по времени получения сообщения (receivedDateTime свойство). Он включает в себя DESC ключевое слово, чтобы сообщения, полученные в последнее время, были перечислены первыми. В get_inboxдобавление $orderby выполняется с orderby помощью параметра в объекте MessagesRequestBuilderGetQueryParameters .
Отправка почты
Теперь добавьте возможность отправки сообщения электронной почты в качестве пользователя, прошедшего проверку подлинности.
Добавьте следующую функцию в graph.py.
async def send_mail(self, subject: str, body: str, recipient: str): message = Message() message.subject = subject message.body = ItemBody() message.body.content_type = BodyType.Text message.body.content = body to_recipient = Recipient() to_recipient.email_address = EmailAddress() to_recipient.email_address.address = recipient message.to_recipients = [] message.to_recipients.append(to_recipient) request_body = SendMailPostRequestBody() request_body.message = message await self.user_client.me.send_mail.post(body=request_body)Замените пустую
send_mailфункцию в main.py на следующую.async def send_mail(graph: Graph): # Send mail to the signed-in user # Get the user for their email address user = await graph.get_user() if user: user_email = user.mail or user.user_principal_name await graph.send_mail('Testing Microsoft Graph', 'Hello world!', user_email or '') print('Mail sent.\n')Запустите приложение, войдите в систему и выберите вариант 3, чтобы отправить себе сообщение электронной почты.
Please choose one of the following options: 0. Exit 1. Display access token 2. List my inbox 3. Send mail 4. Make a Graph call 3 Mail sent.Примечание.
Если вы тестируете с помощью клиента разработчика из Программы разработчика Microsoft 365, отправленное сообщение электронной почты может не быть доставлено, и вы можете получить отчет о недоставке. Если вы хотите разблокировать отправку почты из клиента, обратитесь в службу поддержки через Центр администрирования Microsoft 365.
Чтобы убедиться, что сообщение получено, выберите вариант 2, чтобы получить список папки "Входящие".
send_mail описано
Рассмотрим код в send_mail функции.
Отправка почты
Функция использует построитель user_client.me.send_mail запросов, который создает запрос к API отправки почты .
Создание объектов
В отличие от предыдущих вызовов Microsoft Graph, которые считывают только данные, этот вызов создает данные. Чтобы создать элементы с помощью клиентской библиотеки, необходимо создать словарь, представляющий полезные данные запроса, задать нужные свойства, а затем отправить их в вызове API. Так как вызов отправляет данные, post вместо используется getметод .