使用SES发送电子邮件时出现AWS SDK Guzzle错误

时间:2013-10-12 02:15:41

标签: php email amazon-web-services guzzle

我正在尝试使用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],则会发送一个空数组。

我在这里想念的是什么?

1 个答案:

答案 0 :(得分:1)

解: 事实证明我试图在SDK2代码库上使用SDK1数据结构。感谢Charlie Smith帮助我理解我做错了什么。

对于其他人(使用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