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

时间:2013-03-29 19:48:09

标签: php amazon-ses

得到一个奇怪的错误我不知道如何修复。 这是错误:

( ! ) Catchable fatal error: Argument 2 passed to Guzzle\Service\Client::getCommand() must be an array, string given, called in phar://C:/wamp/www/PHPCodeLance/WebTech/Projects/MIB v2/lib/aws/aws.phar/vendor/guzzle/guzzle/src/Guzzle/Service/Client.php on line 93 and defined in phar://C:/wamp/www/PHPCodeLance/WebTech/Projects/MIB v2/lib/aws/aws.phar/vendor/guzzle/guzzle/src/Guzzle/Service/Client.php on line 113
Call Stack
#   Time    Memory  Function    Location
1   0.0009  676280  {main}( )   ..\test.php:0
2   0.0557  3311632 Aws\Ses\SesClient->send_email( )    ..\test.php:30
3   0.0557  3312128 Aws\Common\Client\AbstractClient->__call( ) ..\test.php:30
4   0.0557  3312208 Guzzle\Service\Client->__call( )    ..(null):103
5   0.0557  3312296 Guzzle\Service\Client->getCommand( )    ..(null):93

这是我使用的代码(直接来自AWS页面)

$client = SesClient::factory(array(
    'key'    => '',
    'secret' => '',
    'region' => 'us-east-1'
));

$response = $client->send_email(
    'no-reply@amazon.com', // Source (aka From)
    array('ToAddresses' => array( // Destination (aka To)
        'myemail@hotmail.nl'
    )),
    array( // Message (short form)
        'Subject.Data' => 'Email Test ' . time(),
        'Body.Text.Data' => 'This is a simple test message ' . time()
    )
);

// Success?
var_dump($response->isOK());

UPDATE !!!:

修正了上述问题,现在我收到了SSL证书问题:

Guzzle\Http\Exception\CurlException: [curl] 60: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed [url] https://email.us-east-1.amazonaws.com/ in phar://C:/wamp/www/PHPCodeLance/WebTech/Projects/MIB v2/lib/aws/aws.phar/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php on line 578

提前致谢

3 个答案:

答案 0 :(得分:1)

要获得第一个(现在可以解决 - 如何?)问题的答案,请参阅AWS SDK Guzzle error when sending email with SES

,如果你有问题的解决方案,特别是像这样神秘的解决方案,请发布给其他人使用。

答案 1 :(得分:0)

首先,您似乎应该包含此代码来实例化客户端并在try-catch块中发送电子邮件,这肯定会解决Catchable致命错误部分并允许您的代码继续执行。

就getCommand参数问题而言,我的猜测是你的send_email()参数在调用堆栈中传递时存在一些问题。如果不深入研究SDK,我就不知道哪些参数专门传递给getCommand,但是你可以获得调试问题所需的所有信息,因为你应该能够映射您的参数将通过堆栈跟踪中显示的每个调用进行传递,同时进行调试以验证传递给每个函数的内容是预期的。

答案 2 :(得分:0)

SSL的问题是因为CURL不再捆绑CA证书,您需要设置正确的CA信息。

解决方案1(对PHP.ini的更改):

  1. http://curl.haxx.se/docs/caextract.html
  2. 下载CA捆绑包(cacert.pem)
  3. 将其放在您的本地系统上(例如:C:\ xampp \ cacert.pem)
  4. 打开你的php.ini
  5. 将curl.ca_info选项设置为指向cacert.pem的位置

    Example: curl.ca_info="C:\xampp\cacert.pem"
    
  6. 重启Apache

  7. 解决方案2(在每次CURL调用之前设置选项)

    1. http://curl.haxx.se/docs/caextract.html
    2. 下载CA捆绑包(cacert.pem)
    3. 将其放在您的本地系统上(例如:C:\ xampp \ cacert.pem)
    4. 编写以下代码:

      curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE); 
      curl_setopt ($ch, CURLOPT_CAINFO, "pathto\cacert.pem");
      
    5. 来源:http://tumblr.wehavefaces.net/post/52114563111/environment-windows-xampp-curl-library