2016-03-01 270 views
1

我正在使用PHP通過Amazon SES發送電子郵件。爲了發送大約1000封個性化的電子郵件,我重複地調用API。但是,在每25次調用API之後,我收到以下錯誤:亞馬遜SES在25個API調用後失敗

Fatal error: Uncaught exception 'Aws\Ses\Exception\SesException' with message 'Error executing "SendEmail" on "https://email.eu-west-1.amazonaws.com"; AWS HTTP error: cURL error 77: error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)' exception 'GuzzleHttp\Exception\RequestException' with message 'cURL error 77: error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)' in phar:///home/robcowen/public_html/scripts/aws.phar/GuzzleHttp/Handler/CurlFactory.php:187 Stack trace: #0 phar:///home/robcowen/public_html/scripts/aws.phar/GuzzleHttp/Handler/CurlFactory.php(150): GuzzleHttp\Handler\CurlFactory::createRejection(Object(GuzzleHttp\Handler\EasyHandle), Array) #1 phar:///home/robcowen/public_html/scripts/aws.phar/GuzzleHttp/Handler/CurlFactory.php(103): GuzzleHttp\Handler\CurlFactory::finishError(Object(GuzzleHttp\Handl in phar:///home/robcowen/public_html/scripts/aws.phar/Aws/WrappedHttpHandler.php on line 159 

我在文檔中找不到任何引用限制。我試圖通過每次20個API調用之後的睡眠(30)或每次調用後的睡眠(1)來延遲我的循環。兩者都不起作用。

請問有人有什麼想法嗎?

+0

Curl抱怨ssl證書,也許你沒有正確地提出你的要求? –

+1

SES在[發送率]方面有限制(http://docs.aws.amazon.com/ses/latest/DeveloperGuide/manage-sending-limits.html)。另外,請確保您的帳戶不處於沙盒模式。 – Nicolas

+0

我不在沙盒模式。我的極限是: 發送配額:\t發送每24小時 使用的配額50000個電子郵件:\t 0%爲2016年3月1日20:23 UTC 最大的發送速率:\t 14電子郵件/秒 – Rob

回答

0

在我遇到這樣的錯誤時,它發生在有多個請求通過套接字讀取文件時,所以在循環過程中的某個點它找不到證書並創建一個錯誤。

解決這個問題的一個不好的方法是在每次調用之前添加sleep(1),給它時間在每個請求上加載證書。

解決它的一個更好的方法是將1000個用戶的json列表發送到API或使用郵件列表(我在其他提供者上做過,但不是SES)。一個請求,1000個用戶,兩臺機器在交互中效率更高,並且CPU更友好。