2014-08-29 12 views
12

Quando provo ad usare GMail SMTP per l'invio di e-mail via laravel, ho incontrato il seguente errore:Utilizzando SMTP di Gmail via laravel: connessione non può essere stabilita con l'host smtp.gmail.com [Connessione scaduta # 110]

Swift_TransportException 

Connection could not be established with host smtp.gmail.com [Connection timed out #110] 

e 'la traccia dell'errore:

... 
} 
$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 . ']'... 

e qui ci sono la mia configurazione per la posta:

'driver' => 'smtp', 

'host' => 'smtp.gmail.com', 

'port' => 587, 

'from' => array('address' => '[email protected]', 'name' => 'some'), 

'encryption' => 'tls', 

'username' => '[email protected]', 

'password' => 'mypassword', 

'sendmail' => '/usr/sbin/sendmail -bs', 

'pretend' => false 

Uso un host condiviso e la porta 587 su localhost è aperta.

risposta

1

Prova

'encryption' => 'ssl', 

'port' => 465, 
0

Se si tratta di un account non Google Apps, abilitare definitivamente l'accesso da app meno sicure come suggerito. Se non lo fai, non funzionerà.

Se si tratta di un account Google Apps (ovvero è un account aziendale), esiste un pannello di amministrazione che regola l'accesso. Dovrai assicurarti che stia specificando l'accesso solo tramite autenticazione e non da IP, poiché se è per IP il tuo IP presumibilmente non è sulla lista.

L'ultima cosa da provare è utilizzare l'indirizzo IPv4 di smtp.gmail.com al posto di quel nome di dominio nel codice. Ho scoperto che il mio non si connetterebbe usando il dominio (perché si è risolto con un indirizzo IPv6) ma si collegherebbe quando ho usato l'IP non elaborato al suo posto.

26

Ho avuto lo stesso problema e ho risolto in questo modo:

'driver' => 'sendmail', 

È necessario modificare solo quella linea.

+0

E hai usato smtp di gmail? allora penso che il driver dovrebbe essere smtp, no? – Ahmad

+1

Procedere, ma la ** email ** non viene inviata. – ihue

+0

Dove trovo queste configurazioni? – mr5

3

Il problema è che smtp.gmail.com sta risolvendo un indirizzo IPv6 e che il servizio google ascolta solo su IPv4. Quello che devi fare è impostare l'IP di origine per garantire la risoluzione dei domini come IPv4 e non IPv6.

Il metodo importante:

->setSourceIp('0.0.0.0') 

come è possibile utilizzare nel codice:

$this->_transport = Swift_SmtpTransport::newInstance 
     (
      'smtp.gmail.com', 
      465, 
      'ssl' 
     ) 
      ->setUsername('username') 
      ->setSourceIp('0.0.0.0') 
      ->setPassword('password'); 
+0

Dove posso impostarlo? Forse puoi aiutarmi. Guarda questo: https://stackoverflow.com/questions/48654849/how-can-i-solve-connection-could-not-be-established-with-host-smtp-gmail-com –

0

L'errore potrebbe essere dovuto a 2 verifica passo abilitato. In tal caso, devi creare la password dell'app gmail e utilizzarla come password.

4

Funziona con le stesse impostazioni tranne la crittografia e la porta.Passare a:

Poiché questo è solo per la linea di crittografia localhost dovrebbe anche essere specifico dell'ambiente. Così, invece di sopra ho seguente:

env('MAIL_ENCRYPTION','tls'), 

Ora è possibile impostare questo nel .env file, che viene ambiente specifico e dovrebbe essere in .gitignore

+0

questo funziona per me! – codecarver

0

Ho avuto lo stesso problema con Swiftmailer

Comunque , un trucco rapido che non dovresti usare sarebbe quello di modificare swiftmailer \ swiftmailer \ lib \ classes \ Swift \ Transport \ StreamBuffer.php. In _establishSocketConnection() Linea 253 sostituire:

$options = array(); 

con qualcosa di simile:

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

Questo cambierà le opzioni SSL di stream_context_create() (poche righe sotto $ opzioni):

$this->_stream = @stream_socket_client($host.':'.$this->_params['port'], $errno, 
$errstr, $timeout, STREAM_CLIENT_CONNECT, stream_context_create($options)); 

C'è un hack sporco per questo You can find it here

anche la mia è ENV impostato su

MAIL_DRIVER=smtp 
MAIL_HOST=mail.mydomain.com 
MAIL_PORT=587 
[email protected] 
MAIL_PASSWORD=mypassword 
0

Nel vostro utilizzo del terminale questo comando

sudo ufw consentire in "Postfix Submission" questo abilitare porta 587 per SMTP

2

risolto il mio cambiando il mio file .env come segue:

'driver' => 'sendmail', 
+0

questo ha funzionato per me .. –

0

è necessario creare l'autenticazione di 2 fattori e la password personalizzata nell'account google. Inoltre, non dimenticare di aggiungere una password personalizzata per ogni nuovo host che stai utilizzando.

Problemi correlati