2014-11-23 16 views
7

Ho un problema con CSCart, non riesce a inviare la posta tramite l'account google. Per verificare se c'è un problema nella configurazione del server o negli script di CSCart ho installato una libreria pulita PHPMailer e ho provato a inviare un messaggio di prova usando uno script di esempio. risultato è lo stesso: il collegamentoAvviso: stream_socket_enable_crypto(): operazione SSL non riuscita con codice 1

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 dalla console funziona bene.

FreeBSD 10.0, Apache24, php5.6.

Non sono riuscito a trovare alcuna informazione in google e per ora non so nemmeno in quale file di configurazione cercare la radice del problema.

+0

Sembra che il controllo di sicurezza rigido sia abilitato in PHP e che la connessione non stia verificando.È possibile correggere il cert o abbassare le impostazioni di PHP.ini yoru. Questo vale soprattutto per PHP 5.6. – Synchro

+0

Potresti per favore consiglio quali impostazioni dovrei controllare su php.ini? – Eugenijus

risposta

4

Ciò è dovuto alla nuova politica di verifica per impostazione predefinita in PHP 5.6. Non è impostato in php.ini; è un'opzione che fornisci per fungere da wrapper o da contesti stream. Date un'occhiata alle opzioni here, in particolare a verify_peer. PHPMailer ti permette di impostare questi parametri durante il metodo smtpConnect(), ma non c'è alcuna opzione per passare opzioni nel metodo smtpSend(), quindi avrai bisogno di sottoclasse PHPMailer per ottenere quello.

Potreste trovare l'alternativa più semplice - don't try to use a self-signed or unverifiable certificate.

0

in laravel 5.4 ERRORE

C: \ xampp \ htdocs \ itis_db \ ​​vendor \ swiftmailer \ swiftmailer \ lib \ Classes \ Swift \ Transport \ StreamBuffer.php

e scoprire questa funzione all'interno StreamBuffer.php

private function _establishSocketConnection() 

e incollare queste due linee all'interno di questa funzione

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

e ricarica il tuo browser e prova a eseguire nuovamente il tuo progetto. Per quanto mi riguarda ho messo su in questo modo:

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; 
} 

auguriamo che risolvere questo problema .....

1

Ci sono un sacco di file di configurazione che rende questo errore venire, ma più spesso è che il vostro la configurazione del sistema non è impostata correttamente. Per farlo correttamente, seguire questa:

  1. Verificare se si dispone di file di cacert.pem per OPENSSL oppure no. Se non lo fai, scarica la versione corretta da cacert.pem in base alla tua versione php e configura il tuo file php.ini come "2"

  2. Se hai questo file, devi cercare all'interno del tuo php. ini file e vedere se è stato impostato o no. Per farlo: ricerca per la linea:

    openssl.cafile ="example address..\cacert.pem"

Se si trova la linea con un indirizzo specifico, cercare il file cacert.pem a questo indirizzo, se lo trovate, che è tutto fatto con il file cacert.pem. Altrimenti, dovresti usare l'indirizzo corretto.

Problemi correlati