Автоматизируйте загрузку вложений 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.