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;