已注册重定向URI仍遇Gmail API OAuth2 Error 400: redirect_uri_mismatch
解决Gmail API OAuth2的redirect_uri_mismatch错误
下面是针对你问题的具体排查和解决方法:
1. 确认Google Cloud控制台的重定向URI配置
- 进入Google Cloud控制台你的项目,找到「API和服务」→「凭据」
- 打开你创建的OAuth 2.0客户端ID,检查重定向URI是否包含
http://localhost:8080/(桌面应用类型默认使用这个地址) - 如果是Web应用类型,确保配置的重定向URI和实际使用的完全一致;如果是桌面应用,必须保留
http://localhost:8080/,不可随意修改
2. 检查自定义Create_Service模块的配置
你代码中调用的Create_Service是自定义模块,可能硬编码了重定向URI为http://localhost:8080/。打开Google.py文件,查找是否有类似代码:
flow = InstalledAppFlow.from_client_secrets_file( client_secret_file, scopes=scopes ) # 或指定重定向URI的代码 flow.redirect_uri = "http://localhost:8080/"
- 如果存在指定redirect_uri的代码,要保证和控制台配置的URI完全匹配
- 如果没有指定,
InstalledAppFlow默认会使用http://localhost:8080/,此时控制台必须配置该URI
3. 删除旧的凭据缓存文件
第一次授权生成的token文件会缓存重定向URI信息,即使后续修改了控制台配置,旧缓存仍会生效:
- 找到代码运行目录下的
token.json(或类似凭据缓存文件,通常和oauthkey.json同目录) - 删除该文件后重新运行代码,完成新的授权流程
4. 验证客户端密钥文件正确性
- 确认你使用的
oauthkey.json是修改重定向URI后从控制台重新下载的最新版本,替换掉旧文件 - 打开
oauthkey.json,检查redirect_uris字段是否包含和控制台一致的URI
额外代码问题提醒
你的代码中time.delay("12")是错误用法,应该改为time.sleep(12),且该行位于return send_message之后永远不会执行。同时return语句会导致循环只发送第一封邮件就结束,调整后代码如下:
for mail in mlist: message['to'] = mail encoded_message = base64.urlsafe_b64encode(message.as_bytes()).decode() create_message = {'raw': encoded_message} send_message = service.users().messages().send(userId="me", body=create_message).execute() print(f'Message Id: {send_message["id"]}') time.sleep(12) # 修正为sleep,移至return前 return send_message # 循环结束后再返回
内容的提问来源于stack exchange,提问作者Gayan C
相关产品推荐
相关产品推荐

