我正在尝试使用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]
,则会发送一个空数组。
我在这里想念的是什么?
答案 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