Laravel 10调用AWS SES API出现签名不匹配问题求助
可能的排查方向与解决方案
确认区域完全匹配:AWS SES API对区域匹配要求严格,需确保
mail.php中配置的region与你的SES账户实际所在区域完全一致(比如你配置的ap-southeast-1,需确认SES服务确实开通在该区域),避免拼写错误或混淆区域代码。检查配置文件冲突:若你同时在
config/services.php中配置了SES相关参数,可能会和mail.php的配置产生冲突,建议统一在mail.php中配置,或确保两处配置的区域、签名版本、凭证信息完全一致。验证环境变量有效性:排查
.env文件中AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY是否存在多余空格、引号或格式错误。可在代码中临时添加dd(env('AWS_ACCESS_KEY_ID'), env('AWS_SECRET_ACCESS_KEY')),确认变量被正确读取。强制指定API Endpoint:手动添加SES API的endpoint配置,避免SDK自动解析出错。修改
mail.php中的SES配置:'ses' => [ 'transport' => 'ses', 'version' => 'latest', 'region' => 'ap-southeast-1', 'credentials' => [ 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), ], 'signature_version' => 'v4', 'endpoint' => 'https://email.ap-southeast-1.amazonaws.com' // 添加此行 ],更新AWS SDK依赖:旧版本的
aws/aws-sdk-php可能存在签名算法兼容问题,运行composer update aws/aws-sdk-php更新至与Laravel 10兼容的最新版本。排除临时凭证/角色影响:若你的IAM用户使用的是临时凭证(而非永久密钥),需在配置中添加
token字段:'credentials' => [ 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'token' => env('AWS_SESSION_TOKEN'), ],但根据你的描述,SMTP方式正常,此情况概率较低,可作为兜底排查项。
内容的提问来源于stack exchange,提问作者Niroshan
相关产品推荐
相关产品推荐

