使用os.environ.get调用SendGrid发邮件时出现401错误
SendGrid 401错误排查(环境变量可获取但无法使用)
问题现象
使用os.environ.get('SENDGRID_API_KEY')调用SendGrid发送邮件时触发401认证错误,但直接将API密钥硬编码进代码就能正常发送;且在代码中打印os.environ.get('SENDGRID_API_KEY')能输出正确密钥。
排查与解决方法
1. 检查环境变量值是否包含隐藏字符
设置环境变量时,echo命令可能自动添加换行符,或者输入API密钥时不小心带入首尾空格,这些字符肉眼不可见但会导致认证失败。
- 解决步骤:
- 手动打开
~/.zshenv文件,检查SENDGRID_API_KEY的定义,确保密钥前后没有空格、换行或多余引号; - 重新设置环境变量时使用
-n参数避免添加换行:echo -n 'export SENDGRID_API_KEY=Actual API key' >> ~/.zshenv source ~/.zshenv - 在Python代码中用
repr()打印变量,查看是否有隐藏字符:print(repr(os.environ.get('SENDGRID_API_KEY')))
- 手动打开
2. 移除变量首尾空白字符
如果确认环境变量值存在多余空白,可在代码中对获取到的密钥做strip处理:
sg = SendGridAPIClient(os.environ.get('SENDGRID_API_KEY').strip())
3. 检查环境变量是否被覆盖
后续的shell配置文件(如~/.zshrc、~/.profile)可能重新定义了SENDGRID_API_KEY,导致运行Python时拿到的不是正确值。
- 解决步骤:
- 在终端运行
echo $SENDGRID_API_KEY,确认输出的密钥和实际一致; - 检查所有shell配置文件,确保没有重复定义
SENDGRID_API_KEY的语句。
- 在终端运行
4. 确认API密钥权限
虽然硬编码能正常发送,仍需确认该API密钥是否拥有邮件发送权限(可在SendGrid控制台查看密钥的权限设置),避免因权限变更导致认证失败。
内容的提问来源于stack exchange,提问作者miraj
相关产品推荐
相关产品推荐

