0

我正在尝试使用 AWS SES sendEmail 方法发送邮件,但遇到错误问题。我读过这个问题:AWS SDK Guzzle error when trying to send a email with SES

我正在处理一个非常相似的问题。原始海报表明他们有解决方案,但没有发布解决方案。

我的代码:

$response = $this->sesClient->sendEmail('example@example.com', 
array('ToAddresses' => array($to)), 
array('Subject.Data' => array($subject), 'Body.Text.Data' => array($message)));

产生错误的 Guzzle 代码(来自aws/Guzzle/Service/Client.php):

return $this->getCommand($method, isset($args[0]) ? $args[0] : array())->getResult();

产生的错误:

Catchable fatal error: Argument 2 passed to Guzzle\Service\Client::getCommand() must be of the type array, string given

查看 Guzzle 代码,我可以看到调用getCommand将发送一个字符串,如果args[0]已设置并且是一个字符串。如果args[0]未设置,则发送一个空数组。

请问我在这里缺少什么?

4

1 回答 1

1

解决方案:原来我试图在 SDK2 代码库上使用 SDK1 数据结构。感谢查理史密斯帮助我理解我做错了什么。

对于其他人(使用AWS SDK for PHP 2):

创建客户端 -

$this->sesClient = \Aws\Ses\SesClient::factory(array(
    'key'    =>AWS_ACCESS_KEY_ID,
    'secret' => AWS_SECRET_KEY,
    'region' => Region::US_EAST_1
));

现在,构建电子邮件(不要忘记,如果您使用沙盒,则需要验证您发送到的任何地址。如果您已获得生产状态,则此限制不适用) -

$from = "Example name <example@example.com>";
$to ="example@verified.domain.com";
$subject = "Testing AWS SES SendEmail()";

$response = $this->sesClient->getCommand('SendEmail', array(
    'Source' => $from,
    'Destination' => array(
        'ToAddresses' => array($to)
    ),
    'Message' => array(
        'Subject' => array(
            'Data' => $subject
        ),
        'Body' => array(
            'Text' => array(
                'Data' => "Hello World!\n Testing AWS email sending."
            ),
            'Html' => array(
                'Data' => "<h1>Hello World!</h1><p>Testing AWS email sending</p>"
            )
        ),
    ),
))->execute();

现在应该可以了。

以下是 AWS SDK for PHP 2 文档中的相关部分:

http://docs.aws.amazon.com/aws-sdk-php-2/latest/class-Aws.Ses.SesClient.html#_sendEmail

于 2013-10-13T03:41:04.747 回答