Localhost и "stream_socket_enable_crypto(): операция SSL завершилась неудачно с кодом 1"

Я отправлял электронные письма с помощью gmail, и все работало отлично, но, судя по всему, он прекратил работать. И это показывает мне это.

ErrorException in StreamBuffer.php line 94:

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 StreamBuffer.php line 94
at HandleExceptions->handleError('2', 'stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed', 'C:\xampp\htdocs\coparmex\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php', '94', array())
at stream_socket_enable_crypto(resource, true, '9') in StreamBuffer.php line 94
at Swift_Transport_StreamBuffer->startTLS() in EsmtpTransport.php line 313
at Swift_Transport_EsmtpTransport->_doHeloCommand() in AbstractSmtpTransport.php line 118
at Swift_Transport_AbstractSmtpTransport->start() in Mailer.php line 79
at Swift_Mailer->send(object(Swift_Message), array()) in Mailer.php line 385
at Mailer->sendSwiftMessage(object(Swift_Message)) in Mailer.php line 171

И это происходит только в моем локальном хосте, в веб-хосте отлично работает. Я не понимаю, что происходит: c

Это мои настройки gmail

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=gmail
MAIL_PASSWORD=password
MAIL_ENCRYPTION=tls

Ответ 1

Это ошибка с вашим сертификатом SSL. Вы пытаетесь использовать SSL-соединение (зашифрованное безопасное соединение) без надлежащего сертификата.

Это связано с тем, что вы подключаетесь к локальному хосту, который небезопасен и который заблокирован соединением. Вы могли бы избежать этого, изменив ваше подключение localhost на SSL-based.

Подробнее см. эту ссылку.

Ответ 2

Вы должны добавить приведенный ниже код в /config/mail.php (работает на laravel 5.4)

'stream' => [
'ssl' => [
    'allow_self_signed' => true,
    'verify_peer' => false,
    'verify_peer_name' => false,
],
],

так как вы никогда не должны менять код в поставщиках, как это предложил султан Ахмад

Примечание редактора: отключение проверки SSL имеет последствия для безопасности. Без проверки подлинности соединений SSL/HTTPS злоумышленник может выдать себя за доверенную конечную точку (такую как GitHub или какой-либо другой удаленный хост Git), и вы будете уязвимы для атаки "человек посередине". Убедитесь, что вы полностью понимаете проблемы безопасности, прежде чем использовать это в качестве решения.

Ответ 3

У меня была такая же проблема и я смог решить проблему, удалив уровень безопасности проверки подлинности. То есть, в какой-то момент Gmail попросил меня указать номер телефона - 2-й уровень аутентификации. Когда я удалил этот 2-й уровень, я снова был счастлив. Надеюсь, я помог.

Ответ 4

Привет я также нашел это очень полезным на уровне сервера: Отредактируйте \ vendor\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php линия 259 иш. закомментируйте $ options = array(); и добавьте ниже.

$options = array(); 
$options['ssl'] = array('verify_peer' => false,
'verify_peer_name' => false, 'allow_self_signed' => true);

Эта работа с Laravel 6.0

Ответ 5

в Laravel: это решит проблему. перейдите к \vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php

внутри метод частная функция installSocketConnection()

после этого кода

$options = array();
        if (!empty($this->params['sourceIp'])) {
            $options['socket']['bindto'] = $this->params['sourceIp'].':0';
        }

затем добавьте две строки

$options['ssl']['verify_peer'] = FALSE;
$options['ssl']['verify_peer_name'] = FALSE;