Проблемы с Подключением к Outlook Python O365

#python #azure #azure-active-directory #o365-flow

Вопрос:

Я пытаюсь написать сценарий на Python, чтобы получать новые электронные письма из определенной папки и сохранять вложения на общий диск для загрузки в базу данных. Power Automate будет работать, но ограничение на размер файла для сохранения вложения составляет всего 20 МБ. Я могу аутентифицировать токен, но при попытке захватить электронные письма я получаю следующую ошибку:

Неавторизованный для url. Маркер не содержит разрешений или разрешения не могут быть поняты.

Я включил код, который я использую для подключения к Microsoft Graph.

(учетные данные и идентификатор арендатора указаны в моем коде правильно, я убрал их по очевидным причинам

 from O365 import Account, MSOffice365Protocol, MSGraphProtocol

credentials = ('xxxxxx', 'xxxxxx')  
protocol = MSGraphProtocol(default_resource='reporting.triometric@xxxx.com')  
scopes_graph = protocol.get_scopes_for('message_all_shared')  
scopes = ['https://graph.microsoft.com/.default']  
account = Account(credentials, auth_flow_type='credentials', tenant_id="**", scopes=scopes,)  


if account.authenticate():  
print('Authenticated')  
mailbox = account.mailbox(resource='reporting.triometric@xxxx.com')  
inbox = mailbox.inbox_folder()  
for message in inbox.get_messages():  
print(message)  
 

Я уже настроил разрешения через Azure, чтобы включить все необходимые делегирования «почты».

Остальная часть моего скрипта отлично работает для загрузки файлов в базу данных. В настоящее время вложения необходимо вручную сохранять на общем диске несколько раз в день, затем запускается скрипт для загрузки. Есть ли какие-то шаги, которые я упускаю? Любые идеи будут высоко оценены!

Вот разрешения:введите описание изображения здесь

Комментарии:

1. Можете ли вы поделиться скриншотом разрешений, которые вы добавили при регистрации приложения?

2. Я добавил разрешения, настроенные для регистрации этого приложения, спасибо, что посмотрели!

3. Привет, ты изучил мой ответ? Есть ли какие-нибудь новости?

4. Спасибо за помощь, Аллен! Моя организация не разрешает никаких разрешений в меню приложения, поэтому я изменил тип auth_flow_type на «Авторизация», чтобы маркер выдавался через Интернет, но все еще жду утверждения этих разрешений ИТ-командой.

5. Если вы используете Authorization это, значит, он использует поток кода аутентификации. В этом случае делегированное разрешение является правильным. Я обновлю ответ. Если это полезно, вы можете пометить его как принятое. Спасибо.

Ответ №1:

auth_flow_type='credentials' означает, что вы используете поток учетных данных клиента.

В этом случае вам следует добавить разрешения приложения, а не делегированные разрешения.

См. [разрешения][1]:

Не забудьте нажать на кнопку «Предоставить согласие администратора для {вашего арендатора}».

Обновить:

Если вы установите auth_flow_type в значение «Авторизация», он будет использовать поток кода аутентификации, для которого требуется делегированное разрешение.