You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python调用Microsoft Graph API读取组织服务账号邮件并实现持久认证

Microsoft Graph API 无人值守读取服务账号邮件认证方案

核心原理

你之前了解到的需要浏览器交互的是授权码流,适用于有用户主动登录的前端/客户端场景。针对后台无人值守的脚本场景,微软官方提供了客户端凭证流,完全不需要人工操作,配套官方SDK会自动处理token过期刷新,无需每小时手动授权,大量开发者均通过该方案实现同类需求。

前置Azure配置要求(必须完成)

  • 应用注册的「API权限」板块添加Microsoft Graph的应用权限(不要选委托权限,委托权限才需要用户登录授权),根据需求选择Mail.Read(单邮箱权限)或Mail.Read.All(全租户邮箱权限)
  • 权限添加完成后,必须由租户管理员点击「授予管理员同意」,否则调用接口会返回403错误
  • 确认已获取三个核心凭证:租户ID、客户端ID(client id)、客户端密钥(client secret)

Python实现代码

首先安装依赖包:

pip install azure-identity msgraph-core

示例代码:

from azure.identity import ClientSecretCredential
from msgraph.core import GraphClient
import os

# 建议从环境变量读取凭证,不要硬编码在代码中
TENANT_ID = os.getenv("AZURE_TENANT_ID")
CLIENT_ID = os.getenv("AZURE_CLIENT_ID")
CLIENT_SECRET = os.getenv("AZURE_CLIENT_SECRET")
# 要读取的目标服务账号邮箱地址
TARGET_EMAIL = "service_account@your-organization.com"

# 初始化凭证,该类会自动处理token刷新,无需手动管理token有效期
credential = ClientSecretCredential(
    tenant_id=TENANT_ID,
    client_id=CLIENT_ID,
    client_secret=CLIENT_SECRET,
    scopes=["https://graph.microsoft.com/.default"]
)

# 初始化Graph客户端
graph_client = GraphClient(credential=credential)

# 示例:读取目标账号最新的10封邮件
response = graph_client.get(f"/users/{TARGET_EMAIL}/messages?$top=10&$select=subject,receivedDateTime,from")
if response.status_code == 200:
    mails = response.json()["value"]
    for mail in mails:
        print(f"主题:{mail['subject']},接收时间:{mail['receivedDateTime']},发件人:{mail['from']['emailAddress']['address']}")
else:
    print(f"调用失败,错误码:{response.status_code},错误信息:{response.text}")

注意事项

  • 生产环境不要硬编码客户端密钥等敏感信息,建议通过环境变量、密钥管理服务存储
  • 如果需要限制应用只能访问指定的服务账号邮箱,不要授予全租户的Mail.Read.All权限,可在Exchange Online中配置应用访问策略,限制应用仅能访问目标邮箱,降低安全风险
  • 只要凭证有效、权限配置正确,脚本可长期稳定运行,无需任何手动授权操作

内容的提问来源于stack exchange,提问作者wymangr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:54:08