PHP cURL调用SendGrid API遇授权无效错误,求排查方向
SendGrid API授权错误排查方案
一、立即修正代码中的明显错误
Authorization头格式错误
你的Authorization头里,Bearer后有大量冗余空格,还包含了多余的{}。SendGrid API密钥不需要包裹大括号,且Bearer与密钥之间仅需一个空格。修正后示例:'Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'请求体不符合v3 API规范
SendGrid v3的邮件请求体结构与你当前写法完全不符,错误格式可能触发服务器返回非预期的授权类错误。正确结构需包含personalizations、from、content等字段,修正示例:$email = [ 'personalizations' => [ [ 'to' => [ ['email' => "myemail@server.com", 'name' => "Example User"] ] ] ], 'from' => [ 'email' => "sendingemail@otherserver.com", 'name' => "Your Name" ], 'subject' => "PHP Test", 'content' => [ ['type' => 'text/plain', 'value' => "I'm text!"], ['type' => 'text/html', 'value' => "<strong>I'm HTML!</strong>"] ] ];
二、API密钥相关排查
- 确认密钥生成权限:在SendGrid控制台生成密钥时,需至少勾选
Mail Send权限,或临时使用全权限密钥测试,排除权限不足问题。 - 检查密钥完整性:复制密钥时避免带入首尾空格、换行符,直接从控制台复制粘贴到代码。
- 确认密钥状态:在SendGrid的API密钥管理页面,查看对应密钥是否处于启用状态,未被手动撤销。
三、账号与发件人验证排查
- 检查账号状态:确认SendGrid账号未因发送违规内容、发送量超限等被限制。
- 验证发件人:发件邮箱必须完成验证,要么通过域名验证(配置DKIM/SPF),要么验证单个发件人邮箱,未验证的发件人会导致请求失败,可能伴随授权类错误提示。
四、网络与SSL设置排查
- 移除
CURLOPT_SSL_VERIFYHOST和CURLOPT_SSL_VERIFYPEER的禁用配置,关闭这两个选项存在安全风险,且部分环境下会导致请求被拦截或服务器拒绝,建议让cURL正常验证SSL证书。
内容的提问来源于stack exchange,提问作者user23164474
相关产品推荐
相关产品推荐

