erro em enviar email usando o Mandrill (php)

Estou usando Mandrill api pela primeira vez. Estou usando o código a seguir. Eu tenho Mandrill API Key comigo.

 '

Example HTML content

', 'text' => 'Example text content', 'subject' => 'example subject', 'from_email' => 'message.from_email@example.com', 'from_name' => 'Example Name', 'to' => array( array( 'email' => 'recipient.email@example.com', 'name' => 'Recipient Name' ) ), 'headers' => array('Reply-To' => 'message.reply@example.com'), 'important' => false, 'track_opens' => null, 'track_clicks' => null, 'auto_text' => null, 'auto_html' => null, 'inline_css' => null, 'url_strip_qs' => null, 'preserve_recipients' => null, 'view_content_link' => null, 'bcc_address' => 'message.bcc_address@example.com', 'tracking_domain' => null, 'signing_domain' => null, 'return_path_domain' => null, 'merge' => true, 'global_merge_vars' => array( array( 'name' => 'merge1', 'content' => 'merge1 content' ) ), 'merge_vars' => array( array( 'rcpt' => 'recipient.email@example.com', 'vars' => array( array( 'name' => 'merge2', 'content' => 'merge2 content' ) ) ) ), 'tags' => array('password-resets'), 'subaccount' => 'customer-123', 'google_analytics_domains' => array('example.com'), 'google_analytics_campaign' => 'message.from_email@example.com', 'metadata' => array('website' => 'www.example.com'), 'recipient_metadata' => array( array( 'rcpt' => 'recipient.email@example.com', 'values' => array('user_id' => 123456) ) ), 'attachments' => array( array( 'type' => 'text/plain', 'name' => 'myfile.txt', 'content' => 'ZXhhbXBsZSBmaWxl' ) ), 'images' => array( array( 'type' => 'image/png', 'name' => 'IMAGECID', 'content' => 'ZXhhbXBsZSBmaWxl' ) ) ); $async = false; $ip_pool = 'Main Pool'; $send_at = 'example send_at'; $result = $mandrill->messages->send($message, $async, $ip_pool, $send_at); print_r($result); } catch(Mandrill_Error $e) { echo 'A mandrill error occurred: ' . get_class($e) . ' - ' . $e->getMessage(); throw $e; } ?>

Ao usar este código, recebo erro como:

Ocorreu um erro de mandrill: Mandrill_HttpError – Chamada de API para mensagens / envio falhou: verificação de erro de localização de certificado verificar: CAfile: /usr/local/share/certs/ca-root-nss.crt CApath: none

Por que recebo esse erro?

o erro está indicando que você não possui o certificado SSL requerido localmente para verificar a conexão SSL com a API do Mandrill. Você pode obter um pacote de certificados através de um gerenciador de pacotes para o seu sistema operacional ou pode fazer o download do pacote distribuído com o Mozilla: http://curl.haxx.se/docs/caextract.html e depois armazená-los localmente.

Neste arquivo: mandrill-api-php \ src \ Mandrill.php

Na linha 58, onde inicialize curl:

 $this->ch = curl_init(); 

Você precisa adicionar estas duas opções para resolver o problema:

 curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0); 

Ou você tem essa opção para: HTTPS e SSL3_GET_SERVER_CERTIFICATE: verificação de certificado falhou, CA está OK

Depois de baixar cacert.pem de http://curl.haxx.se/docs/caextract.html e colocá-lo no meu servidor, consegui corrigir esse problema (mantendo tudo seguro) com o seguinte:

 $mandrill = new Mandrill(MANDRILL_API_KEY); // Fix CA issue curl_setopt($mandrill->ch, CURLOPT_SSL_VERIFYHOST, true); curl_setopt($mandrill->ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($mandrill->ch, CURLOPT_CAINFO, 'PATH_TO/cacert.pem'); 

A propriedade curl na class Mandrill é pública, portanto, não há necessidade de adicionar hacks à própria biblioteca.