Подтвердить что ты не робот

PHPMailer - SSL3_GET_SERVER_CERTIFICATE: проверка сертификата не выполнена

У вас возникла проблема с отправкой электронной почты с почтового сервера с самоподписанным сертификатом, ошибка, которую я получаю:

PHP Warning:  stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in class.smtp.php on line 327.

Кто-нибудь сталкивался с чем-то похожим?

EDIT:

Я также попытался установить параметры stream_context (params: параметры контекста SSL):

$options['ssl']['verify_peer'] = false;
$options['ssl']['verify_peer_name'] = false;
$options['ssl']['allow_self_signed'] = true;

Не повезло, он по-прежнему терпит неудачу с той же ошибкой, как указано выше.

Спасибо.

4b9b3361

Ответ 1

В PHP 5.6 вводится проверка сертификата SSL, поэтому, если ваша конфигурация нарушена, с этой ошибкой произойдет ошибка. Вы должны исправить свой SSL, но вы можете вернуться к старому поведению, установив свойство SMTPOptions для проверки сертификатов:

$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);

Редактирование библиотеки поражает всю точку библиотек - и если вы сделаете так, как подсказывает Kaf, ваш код сломается при обновлении. На самом деле, не делайте этого.

Ответ 2

У меня та же проблема. Поэтому я изменил файл class.smtp.php в строке 238:

public function connect($host, $port = null, $timeout = 30, $options = array()) {
       if (count($options) == 0) {
           $options['ssl'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true);
       }

теперь он отлично работает!

Ответ 3

Мой ответ относится к @Synchro, Я поместил этот код в свою почту, и теперь его работа прекрасна, TY.

$mail->SMTPOptions = array(
'ssl' => array(
    'verify_peer' => false,
    'verify_peer_name' => false,
    'allow_self_signed' => true
));

Ответ 4

У меня была та же проблема. Оказалось, что в моей конфигурации Postfix отсутствовали настройки промежуточных и корневых сертификатов:

smtpd_tls_CAfile=/etc/ssl/certs/intermediate-root-bundle.crt

Несмотря на то, что эта конфигурация Postfix долгое время работала с Outlook и Thunderbird, PHP был более разборчивым и не прошел проверку SSL.

Итак, даже если у вас может возникнуть соблазн взломать PHPMailer, пожалуйста, не делайте этого и исправьте основную проблему.

Ответ 5

Просто хотел поставить свои 2 цента, так как я искал исправление в течение нескольких дней, пока не попробовал решение Kaf, и это сработало! Спасибо @Kaf

В любом случае... Для меня PHPMailer работал нормально, пока я не решил обновить PHP до PHP5.6

Были внесены изменения для открытия ssl в PHP 5.6. Вот официальные документы:

http://php.net/manual/en/migration56.openssl.php

В документах говорится, что для установки verify_peer и verify_peer_name в false

Итак, просто следуйте ответам Kaf и посмотрите, работает ли это для вас.