2013-10-12 76 views
0

我嘗試使用AWS SES sendEmail方法發送郵件,並且遇到錯誤。我已閱讀此問題:AWS SDK Guzzle error when trying to send a email with SES使用SES發送電子郵件時出現AWS SDK Guzzle錯誤

我正在處理一個非常類似的問題。原始海報表明他們有解決方案,但沒有發佈解決方案。

我的代碼:

$response = $this->sesClient->sendEmail('[email protected]', 
array('ToAddresses' => array($to)), 
array('Subject.Data' => array($subject), 'Body.Text.Data' => array($message))); 

狂飲碼產生的誤差(從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 

綜觀狂飲代碼,我可以看到如果設置了args[0],那麼對getCommand的呼叫將發送一個字符串並且是一個字符串。如果沒有設置args[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 <[email protected]>"; 
$to ="[email protected]"; 
$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的PHP 2文檔的相關章節:

http://docs.aws.amazon.com/aws-sdk-php-2/latest/class-Aws.Ses.SesClient.html#_sendEmail

相關問題