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

如何使用Python通过Microsoft OAuth2认证Outlook邮件服务器?

在Python中实现Outlook OAuth2认证及邮件操作

一、前期准备:Azure AD应用注册

  • 登录Azure门户,创建一个应用注册(账户类型选择「任何组织目录中的账户和个人Microsoft账户」,适配Outlook个人/企业版)
  • 进入应用的「API权限」,添加Microsoft Graph的权限:Mail.Read、Mail.ReadWrite(仅读取邮件选Mail.Read即可),企业账户需授予管理员同意
  • 记录三个关键信息:客户端ID(Application ID)、租户ID(Directory ID)、客户端密码(在「证书和密码」中生成,生成后立即保存,仅显示一次)

二、安装依赖库

执行以下命令安装所需Python库:

pip install exchangelib msal
  • msal:处理Microsoft OAuth2令牌的获取与刷新
  • exchangelib:连接Outlook服务器、操作邮件及文件夹

三、OAuth2认证代码实现

from exchangelib import OAuth2Credentials, Account
from msal import ConfidentialClientApplication

# 替换为你的实际信息
CLIENT_ID = "你的客户端ID"
TENANT_ID = "你的租户ID"
CLIENT_SECRET = "你的客户端密码"
USER_EMAIL = "你的Outlook邮箱地址"

# 初始化MSAL机密客户端(适合无人值守的自动化脚本)
app = ConfidentialClientApplication(
    client_id=CLIENT_ID,
    client_credential=CLIENT_SECRET,
    authority=f"https://login.microsoftonline.com/{TENANT_ID}"
)

# 获取访问令牌
scopes = ["https://outlook.office365.com/.default"]
result = app.acquire_token_for_client(scopes=scopes)

if "access_token" not in result:
    raise Exception(f"认证失败:{result.get('error_description')}")

# 构建OAuth2凭证
oauth_creds = OAuth2Credentials(
    access_token=result["access_token"],
    refresh_token=None,  # 机密客户端模式会自动刷新令牌
    client_id=CLIENT_ID,
    client_secret=CLIENT_SECRET,
    tenant_id=TENANT_ID
)

# 连接到Outlook账户
account = Account(
    primary_smtp_address=USER_EMAIL,
    credentials=oauth_creds,
    autodiscover=True,
    access_type="delegate"
)

print("认证成功,已连接到Outlook账户")

四、后续邮件操作示例

1. 访问邮件文件夹

# 获取收件箱
inbox = account.inbox
# 获取自定义文件夹(路径层级需匹配实际结构)
custom_folder = account.root / "自定义文件夹名称"

2. 查找特定邮件

# 筛选主题含关键词的未读邮件
filtered_emails = inbox.filter(subject__contains="项目通知", is_read=False)

# 遍历输出前10条结果
for email in filtered_emails[:10]:
    print(f"主题:{email.subject}")
    print(f"发件人:{email.sender}")
    print(f"接收时间:{email.datetime_received}")
    print(f"内容预览:{email.body[:200]}...\n")

注意事项

  • 个人Outlook账户可将租户ID替换为common
  • 若为桌面交互场景,可改用公共客户端模式(需用户手动登录授权)
  • 确保应用注册的权限范围与实际操作需求匹配,避免权限不足报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:55:18