2013-03-29 73 views
-2

发生奇怪的错误我不知道如何解决。 这是错误:AWS SDK在尝试使用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(
    '[email protected]', // Source (aka From) 
    array('ToAddresses' => array(// Destination (aka To) 
     '[email protected]' 
    )), 
    array(// Message (short form) 
     'Subject.Data' => 'Email Test ' . time(), 
     'Body.Text.Data' => 'This is a simple test message ' . time() 
    ) 
); 

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

更新!!!:修正了上述问题

,现在我得到了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 

在此先感谢

+4

如果您提到您如何解决第一个错误,以便下一个搜索它的人可以实际使用此页而不是没有任何信息,那将会更有帮助。 – JPR

回答

0

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

至于getCommand参数问题,我的猜测是你的参数send_email()有一些问题传递给调用堆栈。如果不通过SDK进行挖掘,我不知道我的头顶是什么参数专门传递给getCommand,但是您拥有所需的所有信息来调试问题,因为您应该能够映射如何通过参数传递通过堆栈跟踪中显示的每个调用,一路调试来验证传递给每个函数的内容是什么。

+0

虽然这段代码在AWS SES文档中,所以我认为它应该可以工作。 –

+0

难道是我使用AWS的错误代码片段吗? 在这种情况下,有人可以链接到正确的文档,AWS是有点混淆.. –

+0

你使用的是2.0行吗? send_email()来自旧的1.0库,该库已被弃用。请参阅http://docs.aws.amazon.com/aws-sdk-php-2/latest/class-Aws.Ses.SesClient.html – methai

0

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

解决方案1(修改了php.ini):从http://curl.haxx.se/docs/caextract.html

  • 放置在您的本地系统上

    1. 下载CA束(cacert.pem)(用于例如:C:\ XAMPP \ CACERT。 PEM)
    2. 打开你的php.ini
    3. 设置curl.ca_info选项指向cacert.pem的位置

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

    解决方案2(每个CURL调用之前设置选项)

    1. 下载CA从http://curl.haxx.se/docs/caextract.html
    2. 放置在您的本地系统上(如用于束(cacert.pem) :C:\ XAMPP \ cacert.pem)
    3. 收件以下代码:

      curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE); 
      curl_setopt ($ch, CURLOPT_CAINFO, "pathto\cacert.pem"); 
      

    来源:http://tumblr.wehavefaces.net/post/52114563111/environment-windows-xampp-curl-library

  • 相关问题