使用Python调用Gmail API搜索邮件遇权限问题求助
解决Gmail API未授权请求及结合token.json发起授权GET请求的方法
直接GET请求返回Unauthorized的原因
Gmail API的所有接口请求都必须携带有效的OAuth 2.0访问令牌,你发起的无认证信息的GET请求不符合权限要求,并非文档过时。
结合token.json发起授权GET请求的实现
从token.json加载的Credentials对象包含合法的访问令牌,只需将其添加到请求头的Authorization字段中即可:
import requests import os from google.oauth2.credentials import Credentials # 根据实际需求调整权限范围,示例为只读权限 SCOPES = ['https://www.googleapis.com/auth/gmail.readonly'] if os.path.exists("token.json"): creds = Credentials.from_authorized_user_file("token.json", SCOPES) # 构造带认证信息的请求头 headers = {'Authorization': f'Bearer {creds.token}'} # 发起授权请求 response = requests.get( 'https://www.googleapis.com/gmail/v1/users/me/messages?q=in:sent after:2014/01/01 before:2014/02/01', headers=headers ) # 处理响应结果 if response.ok: print(response.json()) else: print(f"请求失败:状态码{response.status_code},详情:{response.json()}")
关键注意点
- 确认
SCOPES的权限覆盖你的操作需求,比如读取邮件用gmail.readonly,发送邮件则需要gmail.send等对应权限。 - 若访问令牌过期,
Credentials对象会自动利用token.json中的刷新令牌更新令牌,无需手动干预。
内容的提问来源于stack exchange,提问作者Tommy
相关产品推荐
相关产品推荐

