Laravel集成Localstack SES发送邮件时遇安全令牌无效错误
Laravel集成Localstack SES解决"安全令牌无效"问题
问题核心
Laravel项目使用Localstack SES发送邮件时,S3功能正常,但SES始终抛出"请求中包含的安全令牌无效"错误,即使凭证配置完全一致。
关键配置修正
完善Laravel的SES服务配置
在config/services.php的ses数组中添加Localstack端点及路径样式配置,确保AWS SDK指向Localstack而非官方AWS服务:'ses' => [ 'key' => env('AWS_ACCESS_KEY_ID', 'xxxxxxxx'), 'secret' => env('AWS_SECRET_ACCESS_KEY', 'xxxxxxxxx'), 'region' => env('AWS_DEFAULT_REGION', 'eu-west-2'), 'endpoint' => env('AWS_ENDPOINT'), // 新增Localstack端点配置 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', true), // 启用路径样式访问 ],清除Laravel配置缓存
确保.env变量正确加载,执行命令清除缓存:php artisan config:clear php artisan cache:clear
Localstack环境校验
确保SES服务已启用
Localstack默认不会启动所有AWS服务,需在容器启动时显式指定启用SES:- Dockerfile方式添加环境变量:
ENV SERVICES=ses,s3 - docker-compose方式在environment中配置:
environment: - SERVICES=ses,s3
- Dockerfile方式添加环境变量:
验证Localstack SES可用性
在Localstack容器内执行带端点的AWS CLI命令测试SES:aws ses send-email \ --from "test@example.com" \ --destination "ToAddresses=recipient@example.com" \ --message "Subject={Data=Test Email},Body={Text={Data=This is a test from Localstack SES}}" \ --endpoint-url=http://localhost:4566若命令执行成功,说明Localstack SES服务正常,问题集中在Laravel配置环节。
额外排查点
- 确认Laravel使用的AWS SDK版本与Localstack 1.2.0兼容,部分新版本SDK可能对Localstack适配存在差异。
- 检查容器网络连通性:确保Laravel容器能正常解析并访问
localstack:4566地址。 - 无需使用真实IAM凭证:Localstack接受任意非空的
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,无需创建真实IAM用户。
内容的提问来源于stack exchange,提问作者YahorLukyanchyk
相关产品推荐
相关产品推荐

