我有一个使用flask构建的webapp。
现在,我有一个需求,需要我展开一个分发列表。我偶然发现了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上的应用程序具有以下权限:
的数据
此外,如果有任何其他方法来扩大一个通讯组列表使用其他一些库,随时建议相同.谢谢.
1条答案
按热度按时间acruukt91#
您还需要在
Credentials
示例上设置identity
属性,如https://ecederstrand.github.io/exchangelib/#oauth-authentication中所述