本地测试Sendgrid遇HTTP Error 403: Forbidden问题求助
SendGrid API 请求返回403/401错误排查方案
问题场景
本地开发服务器测试SendGrid基础功能时,请求持续返回403(禁止访问)或401(未授权)错误。相关配置如下:
- API密钥以
sendgrid_api_key为名存放在.env文件中 - 该密钥已配置SendGrid全部权限
- 已安装
sendgrid==6.9.7版本 - 测试代码:
import os import sendgrid def sendgrid_welcome_email(request): try: sg = sendgrid.SendGridAPIClient(api_key=os.environ.get('sendgrid_api_key')) response = sg.client.contactdb.lists.get() print(response.status_code) print(response.body) print(response.headers) except Exception as ex: print("Unexpected error: " + str(ex)) return "Bad", 500
运行后报错:Unexpected error: HTTP Error 403: Forbidden
排查步骤
- 验证API密钥加载状态:在代码中添加
print(os.environ.get('sendgrid_api_key')),确认密钥是否成功从.env读取。如果输出None,说明.env文件未被正确加载:- 检查
.env是否放在项目根目录 - 确认是否通过
python-dotenv库手动加载环境变量(SendGrid库不会自动读取.env)
- 检查
- 核对密钥权限:登录SendGrid后台,确认该密钥是否启用了
ContactDB相关权限(当前请求的是contactdb.lists.get()端点),避免权限配置未实际生效 - 确认端点调用正确性:查阅
sendgrid==6.9.7的官方文档,验证sg.client.contactdb.lists.get()是否为该版本的正确调用方式 - 排查网络环境:本地代理或防火墙可能阻断请求,尝试关闭代理或切换网络后重新测试
- 更换密钥测试:若密钥曾泄露或长期未更新,可能已被封禁,生成新的API密钥重试
内容的提问来源于stack exchange,提问作者Alexander Thomsen
相关产品推荐
相关产品推荐

