Outlook个人邮箱OAuth认证配置
以下是使用OAuth 2.0认证Outlook个人邮箱、获取access_token并发送邮件的完整流程:
🔑 步骤1:注册Azure AD应用
-
访问 Azure门户
-
创建新应用注册:
- 名称:自定义应用名(如"MyMailApp")
- 重定向URI:
http://localhost
(开发环境)或实际域名 - 账户类型:选择
任何组织目录(任何 Azure AD 目录 - 多租户)和个人 Microsoft 帐户
-
记录关键信息:
Application (client) ID = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Directory (tenant) ID = yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
- 身份验证设置
- 在身份验证 选项卡:
- 添加重定向URI:
http://localhost
- 启用 “访问令牌” 和 “ID 令牌”
- 允许公共客户端流:设置为 “是”
- 添加重定向URI:
- 在身份验证 选项卡:
- 证书和密码
- 创建客户端密钥(客户端密码)
- 记录密钥值(仅显示一次)
- 设置合理的有效期(通常1-2年)
⚙ 步骤2:配置API权限
-
在应用注册页 → API权限 → 添加权限
-
选择:
- Microsoft Graph → 委托的权限
- 勾选权限:
offline_access
(必须!用于获取refresh_token)Mail.Send
User.Read
-
点击授予管理员同意完成授权
🔒 步骤3:获取授权码(code)
构造授权URL(直接在浏览器访问):
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
client_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
&response_type=code
&redirect_uri=http://localhost
&response_mode=query
&scope=offline_access%20mail.send%20user.read
&state=123456
- 关键参数说明:
scope
必须包含offline_access
才能获取refresh_token- 用户登录后会重定向到
redirect_uri?code=AUTH_CODE
🎫 步骤4:获取Access Token
使用cURL换取令牌(替换实际值):
Bash
curl -X POST "https://login.microsoftonline.com/common/oauth2/v2.0/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx &scope=mail.send%20offline_access
&code=上一步获取的AUTH_CODE
&redirect_uri=http://localhost
&grant_type=authorization_code
&client_secret=应用密钥"
✅ 响应示例:
json
{
"access_token": "eyJ0eXAi...",
"refresh_token": "M.R3_BAY...",
"expires_in": 3600,
"token_type": "Bearer"
} }
✉️ 步骤5:使用Access Token发送邮件
通过Microsoft Graph API发送邮件:
Bash
curl -X POST "https://graph.microsoft.com/v1.0/me/sendMail" \
-H "Authorization: Bearer eyJ0eXAi..." \
-H "Content-Type: application/json" \
-d '{
"message": {
"subject": "OAuth测试邮件",
"body": {
"contentType": "Text",
"content": "此邮件通过OAuth认证发送"
},
"toRecipients": [{
"emailAddress": {
"address": "recipient@example.com"
}
}]
}
}'
🔄 步骤6:刷新Access Token(令牌过期时)
使用refresh_token获取新access_token:
Bash
curl -X POST "https://login.microsoftonline.com/common/oauth2/v2.0/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
&scope=mail.send
&refresh_token=M.R3_BAY...
&grant_type=refresh_token
&client_secret=应用密钥"
⚠️ 关键注意事项
-
令牌生命周期
- Access Token有效期:60-90分钟
- Refresh Token有效期:90天(需定期刷新)
- 双重Token机制增强安全性
-
令牌管理机制
offline_access
作用域获取刷新令牌- 自动刷新令牌(有效期90天)
- 本地存储令牌避免重复授权
-
权限变更处理
若修改API权限范围,需重新获取用户授权