PEAR Mail keine Verbindung zu Gmail SMTP, failed to connect to socket
Fakten
Bin ich mit PEAR Mail, ich will mit gmail SMTP zum senden einer E-mail. Ich habe Apache/2.4.27 (Win64) PHP/7.2.0beta3 -, BIRNEN-1.10.15, E-Mail 1.4.1, Net_SMTP 1.8.0, Net_Socket 1.2.2.
Ging ich zu php.ini
und Hinzugefügt extension = php_openssl.dll
. Die error.log
gibt keine ssl-bezogene Fehler.
Hier ist der code
require_once "Mail.php";
$from = '<[email protected]>';
$to = '<[email protected]>';
$subject = 'Hi!';
$body = "Hi,\n\nHow are you?";
$headers = array(
'From' => $from,
'To' => $to,
'Subject' => $subject
);
$smtp = Mail::factory('smtp', array(
'host' => 'ssl://smtp.gmail.com',
'port' => '465',
'auth' => true,
'username' => '[email protected]',
'password' => 'mypassword'
));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo('<p>' . $mail->getMessage() . '</p>');
} else {
echo('<p>Message successfully sent!</p>');
}
Das problem
Bekomme ich diesen Fehler
Failed to connect to ssl://smtp.gmail.com:465 [SMTP: Failed to connect socket: fsockopen(): unable to connect to ssl://smtp.gmail.com:465 (Unknown error) (code: -1, response: )]
und ich habe keine Ahnung, was zu tun ist, habe ich Gegoogelt aber ich habe mehr verwirrt.
Bitte beraten, wie dieses Problem zu beheben. Danke
Update
Folgenden symcbean die Anweisungen, die ich erhielt die folgenden Ergebnisse :
bool(true)
array(5) {
[0]=> string(31) "alt3.gmail-smtp-in.l.google.com"
[1]=> string(26) "gmail-smtp-in.l.google.com"
[2]=> string(31) "alt4.gmail-smtp-in.l.google.com"
[3]=> string(31) "alt1.gmail-smtp-in.l.google.com"
[4]=> string(31) "alt2.gmail-smtp-in.l.google.com" }
IPV4 address = 64.233.188.27
If you've got this far without errors then problem is with your SSL config
Check you've got your cacerts deployed in one of the following locations
default_cert_file = C:\Program Files\Common Files\SSL/cert.pem
default_cert_file_env = SSL_CERT_FILE
default_cert_dir = C:\Program Files\Common Files\SSL/certs
default_cert_dir_env = SSL_CERT_DIR
default_private_dir = C:\Program Files\Common Files\SSL/private
default_default_cert_area = C:\Program Files\Common Files\SSL
ini_cafile =
ini_capath =
If all good so far, then this bit should work....
fsockopen
Warning: fsockopen(): SSL operation failed with code 1. OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed in C:\Apache24\htdocs\phptest2.php on line 28
Warning: fsockopen(): Failed to enable crypto in C:\Apache24\htdocs\phptest2.php on line 28
Warning: fsockopen(): unable to connect to ssl://smtp.gmail.com:465 (Unknown error) in C:\Apache24\htdocs\phptest2.php on line 28
bool(false) int(0) string(0) ""
Linie 28 ist diese Zeile var_dump(fsockopen("ssl://smtp.gmail.com", 465, $errno, $errstr, 3.0));
Nochmals vielen Dank
Update #2
Googelte ich einfach mal "fsockopen(): SSL-Vorgang ist fehlgeschlagen mit Fehlercode 1." die erste Warnung.
Ende bis hier . Ich habe die E-mail-port der AVG, wie die Antwort. symcbean code ohne Fehler ausgeführt, aber mein code antwortete mit
mail error : authentication failure [SMTP: Invalid response code received from server (code: 534, response: 5.7.14 Please log in via your web browser and 5.7.14 then try again. 5.7.14 Learn more at 5.7.14 https://support.google.com/mail/answer/78754 c1sm1243434wre.84 - gsmtp)]
Also googelte ich code: 534, response: 5.7.14
- und Ende-bis hier, folgte den Anweisungen der ersten Antwort von emgh3i, aktiviert weniger gesicherte verbindungen und erlaubt den Zugriff auf mein google-Konto
Und seine arbeiten nun perfekt.
- Sie müssen versuchen, mit einigen Kommandozeilen-tools erste. Überprüfen Sie
openssl client
auf, wie zum herstellen einer Verbindung testen. Wenn dies fehlschlägt, können einige firewall-Regel können vorhanden sein. Wenn es fehlschlägt, von Apache/PHP, so etwas wie SELinux/AppArmor statt. - Was bedeutet
phpinfo()
- show über openssl? - Wie überprüfe ich die
openssl client
auf, wie die Schaffung einer Verbindung test? - Der Abschnitt von openssl ist es, aktiviert ist, und es gibt auch die library-version, der header-version, die Standard-config , aber keine Werte für die
openssl.cafile
und dieopensll.capath
. - Könnte es sein, firewall, hast du irgendwas blockiert verbindungen zum internet?
- Ich wandte mich von der Windows-firewall und ich bekomme den gleichen Fehler. Ich habe auch noch AVG auf meinem system, aber ich dont sehen irgendwelche Einstellungen für das blockieren von verbindungen. So...ja...an dieser Stelle weiß ich nicht...vielleicht ist mein code? Keine Ahnung...
- Ich kam in fast identischen code in anderen Orten (zB diese Frage als ich das erste sah auf Ihre Frage, also ich denke, dein code ist wohl OK. Meine Vermutung wäre, Umwelt - PHP, OS, firewall, aber du hast schon bedeckt die! "Verwenden Sie die Gmail-SMTP-Server" - Abschnitt dieses Handbuchs sagt, dass Sie brauchen, um "Weniger sichere apps", hier beschrieben, haben Sie das getan?
- wenn es sich herausstellt, werden die "Weniger sichere apps" wechseln, würde ich gerne poste es als Antwort ... 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den "Die Nutzung des Gmail-SMTP-Server" Abschnitt dieses Handbuchs sagt, Sie brauchen, um aktivieren Sie "Weniger sichere apps".
Ihre
host
Konfiguration sollte nicht enthalten das Protokoll. Es ist aus dem Grund scheitern, weil es wahrscheinlich versuchen, führen Sie eine DNS-Lookup aufssl://smtp.gmail.com
- und scheitern.Ändern
zu
host
als Sie sagte, das Alter wird nicht nicht geladen, nur hängt dort, und nie geladen wird.ssl://
im Hostnamen, ist offenbar richtigssl://
links, nicht eine Bibliothek oder ein framework. Auch, stackoverflow.com/questions/16642346/...Paar debugging-Schritte :
1. check phpinfo
Ich empfehle
phpinfo()
um zu überprüfen, ob alle Module aktiviert sind. Check für E-mail, fsocketopen.2. Aktivieren Sie debug-flag
Aktivieren
debug
- flag um zu überprüfen, was genau ist das problem. Wie im Bild unten gezeigt.Nach ausführen der oben genannten code auf meinem Rechner bekam ich Folgen Antwort. Thema kann von Ihnen unterscheiden. Aber debug hat mir geholfen. Als ich 2FA aktiviert, es gab mir Fehler. Und ich bekam eine mail, dass mein login wurde gesperrt.
Update:
Dein Problem sieht aus wie PHP ist auch nicht in der Lage, eine Verbindung zum gmail-server.
Ihr code korrekt ist
Versuchte ich zu testen, mein gmail-Konto. E-Mail senden erfolgreich war.
Prüfen Sie Ihre socket-Verbindung
Wenn etwas fehlschlagen, und wir wissen nicht, die Ursache haben wir zu Debuggen. So, hier anstatt einer Antwort, ich bitte Sie führen einige tests
bestätigen system Konnektivität mit dem internet: cmd Öffnen Sie das terminal und geben
bestätigen firewall: Geben Sie Folgendes im cmd terminal
bestätigen php setup: geben Sie
php -a
im cmd terminal und auf php-prompt ausführen (kopieren /einfügen und dann enter drücken) folgenden code ein.bestätigen Pear Mail Bibliothek und Gmail-SMTP-Zugriff: wieder auf cmd und php-Eingabeaufforderung
php -a
ausführen, Ihren eigenen code (wie du gepostet in diesem thread)Und lässt Sie wissen, wo es bricht, und was der Fehler ist. Nur nach, dass wir helfen können
'telnet' is not recognized as an internal or external command, operable program or batch file.
Schritt 3 antwortetesuccess
. Schritt 4 sagte :Warning: Uncaught Error: Class 'PEAR' not found in php shell code:1 Stack trace: #0 {main} thrown in php shell code on line 1
Worden, Kyung-yoong ist die einzige person gemacht zu haben, einen sinnvollen Beitrag zur Lösung des Problems so far (+1 Gewesen!). Ich kann bestätigen, sein Ergebnis. Und ich würde empfehlen, Sie versuchen, die gleichen. Sind Sie derzeit versuchen zu Debuggen eines eher komplexen Stapel von Komponenten:
Worden macht Ihren job für Sie - als die person, die Buchung der Frage - sollte die Schaffung eines Minimale, Vollständige und Überprüfbare Beispiel
Das wird sich hoffentlich auch weitere sinnvolle diagnostische Informationen.
Die wahrscheinlichsten Gründe für dieses scheitern sind:
Daher könnten Sie denken, dieser aufwendigeren Implementierung des test script:
Die sollte man eine Antwort wie diese:
Gegeben, dass wir das nicht replizieren, Ihre Fehler können wir nicht geben, eine definitive Antwort, was das problem ist - aber meine Vermutung wäre, dass Sie haben nicht openSSL konfigurieren.
C:\Program Files\Common Files\SSL/cert.pem
mit der Datei habe ich gerade heruntergeladen von Mozilla? DankBevor ich beginne, lassen Sie mich Vorwort dies, dass es viele möglicherweise Lösungen und Ergebnisse zwischen Ihrem server und dem google-server, so dass dies kann oder kann nicht für verschiedene Menschen arbeiten.
1) SMTP ist nicht sehr sicher, so dass Google möglicherweise die Ablehnung Ihrer Anfrage. Ich hatte dieses problem vor 6 Monaten und die Lösung wurde ermöglicht unsichere apps unter "myaccount.google.com'
2) Wenn das nicht funktioniert, für Sie dann können Sie erwägen, switching-Protokolle.
vom
'host' => 'ssl://smtp.gmail.com',
zu
'host' => 'tls://smtp.gmail.com:587';
In PHP 5.3, den Tipp gegeben, von anderen über "weniger sichere apps", die aktiviert werden müssen, wenn die Anmeldung in Ihrem Google-Gmail-Konto, alle meine Probleme gelöst.
In PHP 7.2 hatte ich mehr zu tun: Einstellung 'auth' auf PLAIN und dann hinzufügen "verify_peer" und verify_peer_name für ssl socket_options wie diese: