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



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

( ! ) Catchable fatal error: Argument 2 passed to GuzzleServiceClient::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 AwsSesSesClient->send_email( )    ..test.php:30
3   0.0557  3312128 AwsCommonClientAbstractClient->__call( ) ..test.php:30
4   0.0557  3312208 GuzzleServiceClient->__call( )    ..(null):103
5   0.0557  3312296 GuzzleServiceClient->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());

更新! !:

修复了上面的问题,现在我得到了一个SSL证书问题:

GuzzleHttpExceptionCurlException: [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

Thanks in advance

关于第一个问题的答案,请参阅使用SES发送电子邮件时出现的AWS SDK Guzzle错误

,如果你有一个问题的解决方案,特别是一个像这样神秘的问题,把它发布给别人使用。

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

就getCommand参数问题而言,我的猜测是您对send_email()的参数存在一些问题,这些参数向下传递到调用堆栈。在不深入研究SDK的情况下,我不知道具体传递给getCommand的参数是什么,但是您在那里拥有调试问题所需的所有信息,因为您应该能够映射参数如何通过堆栈跟踪中显示的每个调用传递,在此过程中进行调试以验证传递给每个函数的内容是预期的。

SSL的问题在于CURL不再捆绑CA证书,您需要设置适当的CA信息。

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

  1. 从http://curl.haxx.se/docs/caextract.html下载CA bundle (cacert.pem)
  2. 将其放在本地系统(例如:C:xamppcacert.pem)
  3. 打开php.ini文件
  4. 设置旋度。Ca_info选项指向cacert.pem

    的位置。
    Example: curl.ca_info="C:xamppcacert.pem"
    
  5. 重新启动Apache

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

  1. 从http://curl.haxx.se/docs/caextract.html下载CA bundle (cacert.pem)
  2. 将其放在本地系统(例如:C:xamppcacert.pem)
  3. 编写以下代码:

    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE); 
    curl_setopt ($ch, CURLOPT_CAINFO, "pathtocacert.pem");
    

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

相关内容

  • 没有找到相关文章

最新更新