У меня проблема с CSCart, он не может отправить почту через аккаунт Google.
Чтобы проверить, есть ли проблема в конфигурации сервера или в сценариях CSCart, я установил чистую библиотеку PHPMailer и попытался отправить тестовое сообщение, используя пример сценария.
Результат тот же:
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 [script path]/class.smtp.php on line 338
OpenSSL соединение с консоли работает хорошо.
FreeBSD 10.0, Apache24, php5.6.
Я не смог найти какую-либо информацию в Google и на данный момент я даже не знаю, в каком файле конфигурации для поиска корня проблемы.
Это связано с новой политикой проверки по умолчанию в PHP 5.6. Это не установлено в php.ini; это опция, которую вы предоставляете для открытия упаковщиков или потоковых контекстов. Посмотрите на варианты Вот, особенно verify_peer
, PHPMailer позволяет устанавливать эти параметры во время smtpConnect()
метод, но нет возможности передать параметры в smtpSend()
метод, так что вам нужно будет создать подкласс PHPMailer для этого.
Вы можете найти альтернативу проще — не пытайтесь использовать самоподписанный или непроверяемый сертификат.
Существует много конфигов, которые приводят к появлению этой ошибки, но чаще всего случается так, что конфигурация вашей системы не настроена должным образом. Чтобы сделать это правильно, выполните следующие действия:
Проверьте, есть ли у вас файл cacert.pem для OPENSSL или нет. Если вы этого не сделаете, загрузите правильную версию из cacert.pem в соответствии с вашей версией php и настройте файл php.ini как «2»
Если у вас есть этот файл, то вам нужно поискать внутри вашего файла php.ini и посмотреть, был ли он установлен в нем или нет. Для этого ищите строку:
openssl.cafile ="example address..\cacert.pem"
Если вы найдете строку с конкретным адресом, поищите файл cacert.pem по этому адресу, если он найден, чем все это делается с файлом cacert.pem. Иначе, вы должны использовать правильный адрес.
в laRAVEL 5.4 ОШИБКА
C: \ XAMPP \ HTDOCS \ itis_db \ поставщика \ SwiftMailer \ SwiftMailer \ Lib \ Классы \ Свифт \ Транспорт \ StreamBuffer.php
и выяснить эту функцию внутри StreamBuffer.php
private function _establishSocketConnection()
и вставьте эти две строки внутри этой функции
$options['ssl']['verify_peer'] = FALSE;
$options['ssl']['verify_peer_name'] = FALSE;
и перезагрузите браузер и попробуйте запустить свой проект снова. Для меня я надеваю так:
private function _establishSocketConnection()
{
$host = $this->_params['host'];
if (!empty($this->_params['protocol'])) {
$host = $this->_params['protocol'].'://'.$host;
}
$timeout = 15;
if (!empty($this->_params['timeout'])) {
$timeout = $this->_params['timeout'];
}
$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;
$this->_stream = @stream_socket_client($host.':'.$this->_params['port'], $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, stream_context_create($options));
if (false === $this->_stream) {
throw new Swift_TransportException(
'Connection could not be established with host '.$this->_params['host'].
' ['.$errstr.' #'.$errno.']'
);
}
if (!empty($this->_params['blocking'])) {
stream_set_blocking($this->_stream, 1);
} else {
stream_set_blocking($this->_stream, 0);
}
stream_set_timeout($this->_stream, $timeout);
$this->_in = &$this->_stream;
$this->_out = &$this->_stream;
}
Надеюсь, вы решите эту проблему …..