我正在尝试使用Python的office365库来通过Outlook发送邮件。 当我使用 SharePoint 时,身份验证非常简单,如下例所示。
from office365.sharepoint.client_context import ClientContext
from office365.runtime.auth.user_credential import UserCredential
sp_credentials = UserCredential(SHAREPOINT_USER,SHAREPOINT_PASSWORD)
sp_con = ClientContext(SHAREPOINT_SITE).with_credentials(sp_credentials)
files = sp_con.web.get_folder_by_server_relative_url(SHAREPOINT_PATH).files
sp_con.load(files).execute_query()
--> 通过上述内容,我能够查看 SharePoint 文件夹中的文件。但通过相同的连接,我能够删除、移动或添加文件。
我刚刚使用了我的微软帐户的用户凭据,一切正常。 但是,对于 Outlook,office365 库使用 MSAL 进行身份验证。 GitHub 页面上给出的示例如下。
import msal
from office365.graph_client import GraphClient
def acquire_token():
"""
Acquire token via MSAL
"""
authority_url = 'https://login.microsoftonline.com/{tenant_id_or_name}'
app = msal.ConfidentialClientApplication(
authority=authority_url,
client_id='{client_id}',
client_credential='{client_secret}'
)
token = app.acquire_token_for_client(scopes=["https://graph.microsoft.com/.default"])
return token
client = GraphClient(acquire_token)
client.me.send_mail(
subject="Meet for lunch?",
body="The new cafeteria is open.",
to_recipients=["[email protected]"]
).execute_query()
此示例迫使我向 Azure Active Directory 注册应用程序,因为我需要该应用程序的客户端 ID 来创建
msal.ConfidentialClientApplication
。我不想那样做。
相反,我寻找一种类似于我用于 SharePoint 的身份验证方法。
您知道一种只需要我提供用户名和密码即可获取
GraphClient()
令牌的方法吗?
我已经尝试过的:
msal.ConfidentialClientApplication
类有一个名为acquire_token_by_username_password
的函数。我用它替换了 acquire_token_for_client
函数,但仍然面临 ConfidentialClientApplication
需要客户端 ID 的问题。
有一些示例如何使用用户名和密码或交互式身份验证进行身份验证。如果您的用户启用了多重身份验证,则使用用户名和密码进行身份验证将不起作用。
用户名和密码验证:
交互式身份验证: