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
相关产品推荐
相关产品推荐

