Laravel 不使用 AWS SES 发送邮件

问题描述 投票:0回答:1

我正在尝试使用 AWS SES 在我的 Laravel 项目中发送电子邮件。
错误消息不是很有帮助。

在 AWS SES 中,我验证了我的域的身份以及我在测试中用作发件人的电子邮件地址。
在 AWS IAM Manager 中,我生成了一个密钥对。
我相信这部分工作正常,因为我使用它在同一 EC2 服务器中使用 PHPMailer 在以前的 PHP 应用程序中发送邮件。
在服务器端,一个运行 Ubuntu 的 EC2 实例,我根据 Laravel 手册安装了软件包:

composer require aws/aws-sdk-php

在 config/mail.php 中:

<?php
return [
'default' => env('MAIL_MAILER', 'smtp'),
'mailers' => [
'ses' => [
            'transport' => ‘ses',
            'host' => env('MAIL_HOST'),
            'key' => env('SES_ACCESS_KEY_ID'),
            'secret' => env('SES_SECRET_ACCESS_KEY'),
            'region' => env('SES_DEFAULT_REGION', 'us-east-1'),
            'encryption' => 'tls',
            'port' => 587,
        ],
], 
'from' => [
        'address' => env('MAIL_FROM_ADDRESS', '[email protected]'),
        'name' => env('MAIL_FROM_NAME', 'Example'),
    ],
];

在config/services.php中:

<?php
return [
    'ses' => [
        'key' => env('SES_ACCESS_KEY_ID'),
        'secret' => env('SES_SECRET_ACCESS_KEY'),
        'region' => env('SES_DEFAULT_REGION', 'us-east-1'),
    ],
];

在.env中:

MAIL_MAILER=ses
MAIL_HOST="email-smtp.sa-east-1.amazonaws.com"
MAIL_FROM_ADDRESS="[email protected]"
MAIL_FROM_NAME="${APP_NAME}"
MAIL_EHLO_DOMAIN="my-verified-domain.com"
SES_DEFAULT_REGION=sa-east-1
SES_ACCESS_KEY_ID=”MY-KEY-ID, TRIED QUOTED AND NOT QUOTED”
SES_SECRET_ACCESS_KEY= “MY-SAK, TRIED QUOTED AND NOT QUOTED”

设置完成后,我运行:

php artisan config:clear
(即使我的项目没有缓存配置)
php artisan tinker

在修补匠中:
Mail::raw("TEST BODY", function($msg){ $msg->to("[email protected]")->subject("TEST SUBJECT"); });

该命令抛出此异常:

对 AWS SES API 的异常请求失败。原因:我们计算的请求签名与您提供的签名不匹配。检查您的 AWS 秘密访问密钥和签名方法。有关详细信息,请参阅服务文档..

出于调试目的,我运行了:

dd(config('mail'));

一切似乎都很好:

array:4 [ // vendor/psy/psysh/src/ExecutionLoopClosure.php(53) : eval()'d code:1
  "default" => "ses"
  "mailers" => array:1 [
    "ses" => array:7 [
      "transport" => "ses"
      "host" => "email-smtp.sa-east-1.amazonaws.com"
      "key" => " MY-KEY-ID"
      "secret" => "MY-SECRET"
      "region" => "sa-east-1"
      "encryption" => "tls"
      "port" => 587
    ]
  ]
  "from" => array:2 [
    "address" => "[email protected]"
    "name" => " LARAVEL_APP "
  ]
  "contact" => array:1 [
    "address" => "LARAVEL_APP"
  ]
]

我不知道它是否有任何帮助,但我会添加一些我已经尝试过的额外测试:
如果我将 Transport 更改为“smtp”,错误是:

Symfony\Component\Mailer\Exception\TransportException 预期响应代码“250”,但得到代码“530”,并显示消息“530 需要身份验证”。

正如我之前所说,SES 凭证在同一 EC2 服务器中的另一个应用程序(不是 Laravel 应用程序)中工作正常。即便如此,我也尝试创建新的,面临同样的错误。
最后,我尝试了邮件程序数组的不同组合,删除了键:“主机”、“区域”、“加密”和“端口”。
我在这里做错了什么?!

php laravel phpmailer amazon-ses
1个回答
0
投票

可能的原因

  1. 交叉检查发件人电子邮件地址是否已在 AWS SES 上验证
  2. 交叉检查 Authtype [PLAIN、LOGIN、CRAM-MD5]- 全部尝试
  3. 对所有 STARTTLS/TLS/SSL 进行交叉测试 - 全部尝试
  4. 尝试telnet端口,并尝试从控制台发送电子邮件并检查返回状态
© www.soinside.com 2019 - 2024. All rights reserved.