微软禁用SMTP auth后,如何用Python通过Outlook发送邮件?
符合Outlook新安全要求的SMTP替代方案:Microsoft Graph API
微软已对个人免费版Outlook禁用SMTP AUTH,推荐使用Microsoft Graph API发送邮件——这是微软官方支持的现代认证方案,基于OAuth2.0,完全符合新安全规范。
实现步骤
1. 注册Azure AD应用(个人账户可操作)
- 登录Azure门户,创建「应用注册」:
- 名称自定义,支持的账户类型选择「任何组织目录中的账户和个人Microsoft账户」
- 重定向URI填写
http://localhost
- 生成客户端密钥:进入应用的「证书和密码」页面,新建客户端密码,保存生成的密钥值(仅显示一次)
- 添加API权限:进入「API权限」页面,添加Microsoft Graph的Mail.Send委托权限,点击「授予管理员同意」(个人账户自身即可完成此操作)
2. Python代码实现
使用requests库完成OAuth2认证并调用Graph API发送邮件:
先安装依赖:
pip install requests
示例代码:
import requests # 配置参数 CLIENT_ID = "你的客户端ID" CLIENT_SECRET = "你的客户端密钥" TENANT_ID = "common" # 个人账户固定用common USER_EMAIL = "你的Outlook邮箱地址" RECIPIENT_EMAIL = "收件人邮箱地址" # 获取访问令牌 token_url = f"https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0/token" token_payload = { "client_id": CLIENT_ID, "client_secret": CLIENT_SECRET, "scope": "https://graph.microsoft.com/.default", "grant_type": "client_credentials" } token_response = requests.post(token_url, data=token_payload) access_token = token_response.json().get("access_token") if not access_token: print("获取令牌失败") exit() # 发送邮件 send_mail_url = f"https://graph.microsoft.com/v1.0/users/{USER_EMAIL}/sendMail" mail_headers = { "Authorization": f"Bearer {access_token}", "Content-Type": "application/json" } mail_payload = { "message": { "subject": "测试邮件", "body": { "contentType": "Text", "content": "这是通过Microsoft Graph API发送的测试邮件" }, "toRecipients": [ { "emailAddress": { "address": RECIPIENT_EMAIL } } ] }, "saveToSentItems": True } mail_response = requests.post(send_mail_url, headers=mail_headers, json=mail_payload) if mail_response.status_code == 202: print("邮件发送成功") else: print(f"发送失败,错误信息:{mail_response.json()}")
补充说明
- 上述代码使用客户端凭据流认证,适合后台脚本类无交互场景
- 若需用户交互式认证(如桌面应用),可改用授权码流,需调整认证逻辑
- 务必确保应用权限配置正确,否则会触发权限不足报错
内容的提问来源于stack exchange,提问作者ijustworkhereshrug
相关产品推荐
相关产品推荐

