7

I've installed the Mandrill PHP API on my Windows Apache server. When trying to send an email using the code below I get the error:

Mandrill_HttpError - API call to messages/send-template failed: SSL certificate problem: unable to get local issuer certificate

It's not clear to me how Mandrill connects to my local issuer certificate. My web server does have a valid certificate and can display HTTPS pages successfully.

Any ideas?

        $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;
    }
Dave Splat
  • 227
  • 2
  • 7

2 Answers2

17

You don't need to turn off curl SSL option, instead you can download the cacert.pem file from http://curl.haxx.se/docs/caextract.html and then include it in either php.ini file curl.cainfo="/exact/location/to/cacert.pem"

or simply change the lines in Mandrill.php file to use it as below.

curl_setopt ($this->ch, CURLOPT_SSL_VERIFYPEER, TRUE); 
curl_setopt ($this->ch, CURLOPT_CAINFO, __DIR__ . "/cacert.pem")

link to the post http://tutewall.com/ssl-certificate-problem-unable-to-get-local-issuer-certificate/

Tekz
  • 1,279
  • 14
  • 20
  • saved me helping a windows user. I went for the first option. Note that the option "curl.cainfo" may not exist in php.ini, add it anyways and it works. – Makiavelo Sep 22 '15 at 00:42
6

Here is a change that fixed my problem. In Mandrill.php add these two lines after the call to curl_init():

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

This approach was suggested by one of the answers at error in send email using Mandrill (php)

Community
  • 1
  • 1
Dave Splat
  • 227
  • 2
  • 7