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;
Не повезло, он по-прежнему терпит неудачу с той же ошибкой, как указано выше.
Спасибо.
Ответы
Ответ 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 и посмотрите, работает ли это для вас.