如何在Laravel 8中正确设置AWS SES发信身份解决权限报错
AWS SES Laravel 发信身份识别错误解决方案
该报错的根因是SES发信时错误将收件人域名识别为需要验证的发信身份,需强制指定已验证的自有域名作为发信身份,以下是完整修复步骤:
- 修复services.php配置错误
你原有配置存在语法错误和参数缺失问题,修正后配置如下:
// services.php return [ 'ses' => [ 'key' => '你的AWS Access Key', 'secret' => '你的AWS Secret Key', 'region' => '你的SES区域,如us-east-1', 'options' => [ 'SourceArn' => 'arn:aws:ses:locationLblabla:identity/[correct-domain].com', 'FromArn' => 'arn:aws:ses:locationLblabla:identity/[correct-domain].com', 'ReturnPathArn' => 'arn:aws:ses:locationLblabla:identity/[correct-domain].com', ], ] ];
修正点说明:
- 补全SourceArn行末尾的逗号,避免PHP语法错误导致配置不生效
- 补充FromArn和ReturnPathArn参数,强制指定所有发信相关身份为你已验证的自有域名,避免SDK自动推断身份时读取收件人域名
- 移除冗余的自定义头配置
删除MyMailable.php中手动添加X-SES-SOURCE-ARN头的逻辑,该配置会和services.php中传递的ARN参数冲突,导致参数优先级异常。 - 验证IAM权限配置
确认你的IAM用户关联的权限策略中,ses:SendRawEmail权限的资源配置为你已验证的域名ARN,示例策略如下:
{ "Effect": "Allow", "Action": "ses:SendRawEmail", "Resource": "arn:aws:ses:locationLblabla:identity/[correct-domain].com" }
- 确认全局发件人配置
检查config/mail.php中的全局发件人地址,必须使用你已验证域名下的邮箱:
// config/mail.php return [ // 其他配置项 'from' => [ 'address' => 'do-not-reply@my-comp.com', 'name' => '你的发件人名称', ], ];
如果完成以上步骤仍无法正常发送,可直接调用AWS SES SDK发送测试邮件,排除Laravel驱动自身bug:
$ses = new Aws\Ses\SesClient([ 'version' => 'latest', 'region' => '你的SES区域', 'credentials' => [ 'key' => '你的AWS Access Key', 'secret' => '你的AWS Secret Key', ], ]); $result = $ses->sendRawEmail([ 'Source' => 'do-not-reply@my-comp.com', 'Destinations' => ['joe-bob@gmail.com'], 'RawMessage' => [ 'Data' => base64_encode("To: joe-bob@gmail.com\nFrom: do-not-reply@my-comp.com\nSubject: 测试邮件\n\n测试内容"), ], 'SourceArn' => 'arn:aws:ses:locationLblabla:identity/[correct-domain].com', 'FromArn' => 'arn:aws:ses:locationLblabla:identity/[correct-domain].com', 'ReturnPathArn' => 'arn:aws:ses:locationLblabla:identity/[correct-domain].com', ]);
如果直接调用SDK可正常发送,说明你当前使用的Laravel版本SES驱动存在参数传递bug,可升级Laravel框架到最新稳定版,或自定义邮件驱动处理SES参数。
内容的提问来源于stack exchange,提问作者Wilhelmina Lohan
相关产品推荐
相关产品推荐

