Я установил Mandrill PHP API на свой сервер Windows Apache. При попытке отправить письмо по указанному ниже коду я получаю сообщение об ошибке:
Mandrill_HttpError — Ошибка вызова API для сообщений / шаблона отправки: проблема с сертификатом SSL: невозможно получить сертификат локального эмитента
Мне не ясно, как Mandrill подключается к моему локальному сертификату эмитента. Мой веб-сервер имеет действительный сертификат и может успешно отображать HTTPS-страницы.
Есть идеи?
$mandrill = new Mandrill('MyMandrillAPIKey');
$message = array(
'subject' => 'Test message',
'from_email' => 'MyEmailAddress',
'html' => '<p>this is a test message with Mandrill\'s PHP wrapper!.</p>',
'to' => array(array('email' => 'MyEmailAddress', 'name' => 'David Splat')),
'merge_vars' => array(array(
'rcpt' => 'MyEmailAddress',
'vars' =>
array(
array(
'name' => 'FIRSTNAME',
'content' => $fName),
array(
'name' => 'LASTNAME',
'content' => $lName)
))));
$template_name = 'MyTemplateName';
$template_content = array(
array(
'name' => 'main',
'content' => 'Hi *|FIRSTNAME|* *|LASTNAME|*, thanks for signing up.'),
array(
'name' => 'footer',
'content' => 'Copyright 2014.')
);
print_r($mandrill->messages->sendTemplate($template_name, $template_content, $message));
} catch(Mandrill_Error $e) {
// Mandrill errors are thrown as exceptions
echo 'A mandrill error occurred: ' . get_class($e) . ' - ' . $e->getMessage();
throw $e;
}
Вам не нужно отключать параметр SSL curl, вместо этого вы можете загрузить файл cacert.pem из http://curl.haxx.se/docs/caextract.html а затем включить его в любой файл php.ini
curl.cainfo="/exact/location/to/cacert.pem"
или просто измените строки в файле Mandrill.php, чтобы использовать его, как показано ниже.
curl_setopt ($this->ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt ($this->ch, CURLOPT_CAINFO, __DIR__ . "/cacert.pem")
ссылка на пост http://tutewall.com/ssl-certificate-problem-unable-to-get-local-issuer-certificate/
Вот изменение, которое исправило мою проблему. В Mandrill.php добавьте эти две строки после вызова curl_init ():
curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);
Такой подход был предложен одним из ответов на ошибка при отправке электронной почты с использованием Mandrill (php)