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

Python使用OAuth2连接Outlook邮箱IMAP的代码示例请求

使用OAuth2连接Outlook IMAP的Python实现

微软已全面弃用Outlook邮箱的Basic Auth认证方式,改用OAuth2是唯一合法的登录途径。以下是完整的代码示例,包含token获取和IMAP连接流程:

前提准备

  • 在Azure Active Directory中注册应用,获取客户端ID、客户端密钥
  • 为应用添加IMAP.AccessAsUser.All的Delegated权限,并完成管理员/用户授权
  • 获取用户的Refresh Token(通过OAuth2授权码模式等流程获取)

代码示例

import imaplib
import requests

# 配置参数
CLIENT_ID = "你的客户端ID"
CLIENT_SECRET = "你的客户端密钥"
REFRESH_TOKEN = "用户的Refresh Token"
USER_EMAIL = "你的Outlook邮箱地址"

# 获取Access Token
def get_access_token():
    token_url = "https://login.microsoftonline.com/common/oauth2/v2.0/token"
    payload = {
        "client_id": CLIENT_ID,
        "client_secret": CLIENT_SECRET,
        "refresh_token": REFRESH_TOKEN,
        "grant_type": "refresh_token",
        "scope": "https://outlook.office.com/IMAP.AccessAsUser.All offline_access"
    }
    response = requests.post(token_url, data=payload)
    response.raise_for_status()
    return response.json()["access_token"]

# 连接Outlook IMAP服务器
def connect_imap():
    access_token = get_access_token()
    imap = imaplib.IMAP4_SSL("imap-mail.outlook.com")
    # 使用XOAUTH2认证
    imap.authenticate("XOAUTH2", lambda x: f"user={USER_EMAIL}\1auth=Bearer {access_token}\1\1")
    # 选择收件箱
    status, messages = imap.select("INBOX")
    if status == "OK":
        print("成功连接并登录Outlook邮箱")
        # 可在此添加邮件读取、操作等后续逻辑
        imap.logout()
    else:
        print(f"登录失败,状态码:{status}")

if __name__ == "__main__":
    connect_imap()

关键说明

  • XOAUTH2是IMAP协议支持OAuth2的标准认证机制,必须按照指定格式构造认证字符串
  • scope参数需包含offline_access,才能通过Refresh Token长期获取新的Access Token(Access Token有效期约1小时)
  • 若遇到认证失败,需检查应用权限是否正确配置、Refresh Token是否有效、客户端凭证是否匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:10:50