Автоматизируйте загрузку вложений Outlook с помощью Python

Введение:

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



Примечание. Обратите внимание, что если вы используете ADAL для аутентификации, Microsoft рекомендует перейти на MSAL.

Требования:

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

  • Учетные данные почтового ящика (имя пользователя и пароль)
  • Электронная почта отправителя (при необходимости фильтровать сообщения от определенного отправителя)
  • Идентификатор сообщения (уникальный идентификатор сообщения электронной почты)
  • Идентификатор вложения для идентификатора сообщения (идентификатор вложения для электронного письма с вложением).

Приведенные выше данные необходимы для аутентификации, инициализации объекта ClientApplication и создания API MS Graph для загрузки вложений.

Установите MSAL:

$pip install msal

Библиотека проверки подлинности Майкрософт для Python позволяет входить в систему пользователей или приложений с помощью удостоверений Майкрософт, получать токены проверки подлинности для использования с API Microsoft Graph. Они построены с использованием протоколов подключения OAuth2 и OpenID.

Инициализация клиентского приложения:

MSAL определяет 3 типа приложений и четко разграничивает их инициализацию.

  • Клиентское приложение
  • PublicClientApplication
  • Конфиденциальное клиентское приложение

Чтобы узнать больше о типах клиентов OAuth, нажмите здесь. В этой статье мы будем использовать ClientApplication для инициализации объекта приложения и повторного использования его в нашем приложении.

Получить токен:

Теперь, когда у нас инициализирован объект приложения, мы можем получить файл token. Этот токен можно использовать для извлечения в access_token заголовков.

Выход:

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

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

https://graph.microsoft.com/v1.0/me/messages?$top=20

Это устанавливает размер страницы на 20.

Вывод токена выглядит так.

Извлечь электронные письма для имени пользователя:

Мы будем использовать API MS Graph для извлечения всех сообщений. Документация по API доступна здесь.

Выход:

Теперь, когда у нас есть сообщения, нам нужно извлечь id сообщений, у которых флаг hasAttachments установлен на True. Что-то вроде ниже:

Кроме того, вы также можете использовать параметры фильтра в API для фильтрации сообщений от определенного отправителя, как показано ниже.

GET https://graph.microsoft.com/v1.0/me/messages?$select=sender,subject

Здесь sender — это фильтр. Вы также можете связать несколько фильтров, таких как отправитель и тема.

Теперь предположим, что у нас есть все идентификаторы писем с вложениями. Нам нужно получить все идентификаторы вложений для электронной почты.

Извлечь идентификатор вложения для сообщения:

Мы предполагаем, что это электронное письмо имеет только одно вложение. Документация по API доступна здесь.

Скачать вложение:

Теперь, когда у нас есть идентификаторы вложения и сообщения, мы можем загрузить вложение. Я также добавил индикатор выполнения, чтобы показать прогресс загрузки. документация по API для скачивания доступна здесь.

Краткое содержание:

  • Создайте объект ClientApplication и используйте его на протяжении всего жизненного цикла нашего приложения.
  • Используйте объект приложения, чтобы извлечь все вложения для определенного отправителя.
  • Отфильтруйте сообщения с вложениями и добавьте все идентификаторы вложений и соответствующие идентификаторы сообщений в файл list/dict.
  • Используйте идентификатор сообщения и идентификатор вложения, чтобы загрузить вложение.

И вот оно. Спасибо за чтение.

Первоначально опубликовано на https://dock2learn.com 25 марта 2022 г.

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Присоединяйтесь к нашему сообществу Discord.