2014-08-29 5 views
12

Wenn ich E-Mail über Laravel für das Senden von GMail SMTP zu verwenden versuchen, festgestellt werden kann, begegne ich die folgende Fehlermeldung:Mit gmail smtp über Laravel: Anschluss nicht mit Host smtp.gmail.com [Connection timed out # 110]

Swift_TransportException 

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

Es ist die Spur des Fehlers:

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

und hier meine Konfiguration für E-Mail sind:

'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 

Ich benutze einen Shared Host und der Port 587 auf localhost ist offen.

Antwort

1

Versuchen

'encryption' => 'ssl', 

'port' => 465, 
0

Wenn es sich nicht um ein Google Apps-Konto handelt, aktivieren Sie wie empfohlen den Zugriff aus weniger sicheren Apps. Wenn Sie das nicht tun, wird es nicht funktionieren.

Wenn es sich um ein Google Apps-Konto handelt (dh es handelt sich um ein Geschäftskonto), gibt es ein Admin-Steuerfeld, das den Zugriff regelt. Sie müssen sicherstellen, dass nur der Zugriff über die Authentifizierung und nicht über die IP-Adresse festgelegt wird, da Ihre IP-Adresse vermutlich nicht auf der Liste steht.

Das letzte, was Sie versuchen sollten, ist die Verwendung der IPv4-Adresse von smtp.gmail.com anstelle des Domänennamens in Ihrem Code. Ich habe festgestellt, dass meine Verbindung mit der Domäne keine Verbindung herstellen würde (weil das auf eine IPv6-Adresse aufgelöst wurde), aber ich würde eine Verbindung herstellen, wenn ich die rohe IP an ihrer Stelle verwendete.

26

Ich hatte das gleiche Problem, und ich beschlossen, es auf diese Weise:

'driver' => 'sendmail', 

Sie nur diese Zeile ändern müssen.

+0

Und Sie verwendeten SMTP von Google Mail? dann denke ich, dass der Fahrer smtp sein sollte, nicht? – Ahmad

+1

Dies geht durch, aber die ** E-Mail ** sendet nicht. – ihue

+0

Wo könnte ich diese Konfigurationen finden? – mr5

3

Das Problem ist, dass smtp.gmail.com eine IPv6-Adresse löst und dass Google-Dienst nur IPv4 hört. Sie müssen die Quell-IP so einstellen, dass Domänen als IPv4 und nicht als IPv6 behandelt werden.

Die wichtige Methode:

->setSourceIp('0.0.0.0') 

Wie Sie es im Code verwendet werden könnten:

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

Wo kann ich es einstellen? Vielleicht können Sie mir helfen. Schau dir das an: https://stackoverflow.com/questions/48654849/how-can-i-solve-connection-could-not-be-established-with-host-smtp-gmail-com –

0

Der Fehler kann durch 2 Schritt Überprüfung sein aktiviert. In diesem Fall müssen Sie ein Google Mail-App-Passwort erstellen und dieses als Passwort verwenden.

4

Funktioniert für mich mit den gleichen Einstellungen außer Verschlüsselung und Port.Ändern zu:

Da dies nur für localhost ist, sollte die Verschlüsselungslinie auch umgebungsspezifisch sein. Anstatt also oben Ich habe folgende:

env('MAIL_ENCRYPTION','tls'), 

Jetzt können Sie diese in .env-Datei festgelegt, die in sein umgebungsspezifischen und sollte, ist .gitignore

+0

dieser funktioniert bei mir! – codecarver

0

bekam ich das gleiche Problem Swiftmailer mit

Wie dem auch sei Ein schneller schmutziger Hack, den Sie nicht verwenden sollten, wäre es, swiftmailer \ swiftmailer \ lib \ classes \ Swift \ Transport \ StreamBuffer.php zu bearbeiten. In _establishSocketConnection() Linie 253 ersetzt werden:

$options = array(); 

mit etwas wie folgt aus:

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

Dies wird die ssl Optionen von stream_context_create ändern() (ein paar Zeilen weiter unten $ options):

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

Es ist ein schmutziger Hack für diese meine ENV You can find it here

auch ist eingestellt auf

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

In Ihrem Terminal Gebrauch zu priorisieren

sudo ufw ermöglichen in "Postfix Submission" dies ermöglichen Port 587 für SMTP

2

Gelöschte Mine durch Ändern meiner .env-Datei wie folgt:

'driver' => 'sendmail', 
+0

das hat bei mir funktioniert .. –

0

Sie müssen 2-Faktor-Authentifizierung und benutzerdefinierte Passwort in Google-Konto erstellen. Vergessen Sie auch nicht, ein benutzerdefiniertes Passwort für jeden neuen Host hinzuzufügen, den Sie verwenden.

Verwandte Themen