Ответ 1
Попробуйте изменить app/config/email.php
smtp
до mail
stream_socket_enable_crypto(): SSL operation failed with code 1.
OpenSSL Error messages: error:14090086:SSL
routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Im, используя Laravel 4.2, PHP 5.6, Apache 2.4
У меня установлен GoDaddy SSL в Amazon ec2 Linux.
SSL работает нормально, когда я посещаю сайт с помощью https.
Ошибка при вызове моей функции:
<?php
public function sendEmail()
{
\Mail::send ( 'emails.code.code', $data, function ($sendemail) use($email) {
$sendemail->from ( '[email protected]', 'Me Team' );
$sendemail->to ( $email, '' )->subject ( 'Activate your account' );
} );
}
?>
Я прочитал несколько статей об этом, они сказали, что есть вещи, которые мы должны внести некоторые изменения, они поместили этот код, но я не знаю, где его вставить.
Прочитал это: https://www.mimar.rs/en/sysadmin/2015/php-5-6-x-ssltls-peer-certificates-and-hostnames-verified-by-default/
и эту документацию php http://php.net/manual/en/migration56.openssl.php, которую трудно понять.
Итак, мой вопрос в том, как решить эту проблему?
Попробуйте изменить app/config/email.php
smtp
до mail
Вы должны добавить код ниже в /config/mail.php(работает на laravel 5.4)
'stream' => [
'ssl' => [
'allow_self_signed' => true,
'verify_peer' => false,
'verify_peer_name' => false,
],
],
У меня также есть эта ошибка в laravel 4.2. Я так решил. Выясните StreamBuffer.php
. Для меня я использую xampp, а мое имя проекта isis_db для этого, мой путь такой. Поэтому попробуйте найти в соответствии с вашим
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;
}
Надеюсь, вы решите эту проблему.....
Простое исправление для этого может быть связано с настройкой config/mail.php и отключением TLS
'encryption' => env('MAIL_ENCRYPTION', ''), //'tls'),
В основном, делая это
$options['ssl']['verify_peer'] = FALSE;
$options['ssl']['verify_peer_name'] = FALSE;
Вы также должны освободить систему безопасности, но в первом варианте нет необходимости погружаться в код поставщика.
Чтение приложения /config/mailphp
Supported : "smtp", "mail", "sendmail"
В зависимости от ваших почтовых утилит, установленных на вашем компьютере, введите значение ключа драйвера. Я бы сделал
'driver' => 'sendmail',
Настройте параметры с помощью транспорта...
$mailer = \Swift_Mailer::newInstance(
\Swift_SmtpTransport::newInstance()
->setHost(\Yii::$app->params['servers'][4]['host'])
->setPort(\Yii::$app->params['servers'][4]['port'])
->setEncryption(\Yii::$app->params['servers'][4]['encr'])
->setStreamOptions(array('ssl' => array('allow_self_signed' => true, 'verify_peer' => false, 'verify_peer_name' => false)))
->setUsername(\Yii::$app->params['servers'][4]['user'])
->setPassword(\Yii::$app->params['servers'][4]['pass'])
);