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

旧Python应用:如何用imaplib+OAuth2.0访问Outlook邮箱(替代基础认证)

使用imaplib + OAuth2.0访问Outlook邮箱(Ubuntu环境)

前置准备

  • 在Azure Active Directory中注册应用,获取以下核心信息:
    • 客户端ID(Client ID)
    • 客户端密钥(Client Secret)
    • 租户ID(Tenant ID)
  • 为应用添加IMAP.AccessAsUser.All权限,若为企业账户需完成管理员同意

代码实现

无需更换现有库,仅需用requests获取OAuth2令牌(Ubuntu环境可通过pip install requests安装),再替换原有的认证逻辑即可。

第一步:获取OAuth2访问令牌

import requests

def get_oauth_token(client_id, client_secret, tenant_id, email, password):
    token_url = f"https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token"
    payload = {
        "client_id": client_id,
        "client_secret": client_secret,
        "scope": "https://outlook.office.com/IMAP.AccessAsUser.All offline_access",
        "grant_type": "password",
        "username": email,
        "password": password
    }
    response = requests.post(token_url, data=payload)
    response.raise_for_status()
    return response.json()["access_token"]

注意:若账户开启了多因素认证(MFA),密码授权流程不可用,需改用授权码流程:引导用户手动授权获取授权码,再用授权码兑换访问令牌。

第二步:替换imaplib认证逻辑

将原有的mail.login(EMAIL, PASSWORD)替换为OAuth2认证,其余邮件读取、附件下载逻辑完全保留:

import imaplib

# 配置信息
SERVER = "outlook.office365.com"
EMAIL = "你的Outlook邮箱地址"
CLIENT_ID = "你的Azure应用客户端ID"
CLIENT_SECRET = "你的Azure应用客户端密钥"
TENANT_ID = "你的Azure租户ID"
PASSWORD = "你的邮箱密码(未开启MFA时使用)"

# 获取访问令牌
access_token = get_oauth_token(CLIENT_ID, CLIENT_SECRET, TENANT_ID, EMAIL, PASSWORD)

# 连接IMAP服务器并完成OAuth2认证
mail = imaplib.IMAP4_SSL(SERVER)
# 构造XOAUTH2认证字符串,lambda用于适配imaplib的回调要求
mail.authenticate('XOAUTH2', lambda x: f"user={EMAIL}\x01auth=Bearer {access_token}\x01\x01")

# 后续原有逻辑保持不变
mail.select('inbox')
# 示例:搜索邮件
status, messages = mail.search(None, 'ALL')
# ... 原有邮件读取、附件下载代码继续执行

关键说明

  • imaplib原生支持XOAUTH2认证机制,仅需通过authenticate方法传入符合规范的认证字符串,无需替换现有业务代码
  • 若出现认证失败,优先检查Azure应用的权限配置是否正确、令牌是否有效
  • 对于MFA账户,授权码流程更安全,可避免硬编码密码,实现方式为:先引导用户访问授权URL获取授权码,再用授权码向Azure令牌接口兑换访问令牌

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:30:42