2014-11-09 20 views
6

Tôi đã cài đặt API PHP Mandrill trên máy chủ Windows Apache của mình. Khi cố gắng để gửi một email bằng cách sử dụng đoạn mã sau tôi nhận được thông báo lỗi:Mandrill PHP không thể lấy chứng chỉ SSL của tổ chức phát hành địa phương

Mandrill_HttpError - gọi API để tin nhắn/gửi-mẫu thất bại: SSL Giấy chứng nhận vấn đề: không thể để có được giấy chứng nhận phát hành địa phương

Nó không rõ ràng với tôi cách Mandrill kết nối với chứng chỉ nhà phát hành địa phương của tôi. Máy chủ web của tôi không có chứng chỉ hợp lệ và có thể hiển thị thành công các trang HTTPS.

Bất kỳ ý tưởng nào?

 $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; 
    } 

Trả lời

7

Đây là thay đổi đã khắc phục được sự cố của tôi. Trong Mandrill.php thêm hai dòng sau sau khi cuộc gọi đến curl_init():

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

Cách tiếp cận này đã được đề xuất bởi một trong những câu trả lời ở error in send email using Mandrill (php)

+7

này về cơ bản sẽ tắt hoàn toàn SSL và là một chút nguy hiểm. – ceejayoz

+0

Cảm ơn, điều này giải quyết vấn đề của tôi – gabrielbuzzi

+0

Giải pháp chính xác có thể được tìm thấy tại http://stackoverflow.com/questions/19222562/error-in-send-email-using-mandrill-php – kyriakos

15

Bạn không cần phải tắt tùy chọn SSL curl, thay vào đó bạn có thể tải xuống tệp cacert.pem từ http://curl.haxx.se/docs/caextract.html và sau đó đưa tệp đó vào tệp php.ini curl.cainfo="/exact/location/to/cacert.pem"

hoặc chỉ cần thay đổi dòng trong tệp Mandrill.php để sử dụng như sau.

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/

+0

đã lưu tôi giúp người dùng cửa sổ. Tôi đã đi cho các tùy chọn đầu tiên. Lưu ý rằng tùy chọn "curl.cainfo" có thể không tồn tại trong php.ini, thêm anyways và nó hoạt động. – Makiavelo

Các vấn đề liên quan