使用exchangelib扩展DL时遇到问题

问题描述 投票:0回答:1

我有一个使用 Flask 构建的网络应用程序。

现在,我有一个需求,需要我扩展通讯组列表。我遇到了 Exchangelib 库并尝试使用它。

我可以毫无问题地进行配置。 我正在使用 OAuth2。 我还在 Azure 上注册了一个应用程序。

exchangelib 配置是:

from exchangelib import OAuth2Credentials,Version,Build,Configuration,Account,Credentials,IMPERSONATION,OAUTH2
from exchangelib.version import EXCHANGE_O365

username = '<primary_smtp_email_id>' 
tenant_id = app.config['APP_TENANT_ID']
client_id = app.config['APP_CLIENT_ID']
secret_value = app.config['APP_CLIENT_SECRET']
version=Version(build=EXCHANGE_O365)
credentials = OAuth2Credentials(client_id=client_id, client_secret=secret_value, tenant_id=tenant_id)

config = Configuration(service_endpoint = 'https://outlook.office365.com/EWS/Exchange.asmx',
                        credentials=credentials,
                        auth_type=OAUTH2 , 
                        version=version)
account = Account(username, credentials=credentials, autodiscover=False, config=config, access_type=IMPERSONATION)



以及扩展 DL 的代码:

def print_expanded_dl(dl):
    for mailbox in account.protocol.expand_dl(dl):
        print(mailbox.email_address)

但是,当我调用 print_expanded_dl 函数时出现错误。 我遇到的错误是:

exchangelib.errors.ErrorInvalidExchangeImpersonationHeaderData: ExchangeImpersonation SOAP header must be present for this type of OAuth token.

请帮忙,因为我搜索了类似的案例,发现配置中的access_type需要设置为IMPERSONATION。我已经做到了。 此外,Azure 上的应用程序具有以下权限:

此外,如果有任何其他方法可以使用其他库扩展分发列表,请随时提出相同的建议。谢谢你。

python oauth-2.0 configuration exchangewebservices exchangelib
1个回答
0
投票

您还需要在

identity
实例上设置
Credentials
属性,如 https://ecederstrand.github.io/exchangelib/#oauth-authentication

中所述
© www.soinside.com 2019 - 2024. All rights reserved.