You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
      
  • 验证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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:47:46