2016-06-21 25 views
0

Ich baue eine Website, und ein Teil davon muss E-Mails senden (eine für Account-Passwort-Reset-Links, die andere für allgemeine Benutzer-Admin-Kontakt). Ich habe PearMailer verwendet, um E-Mails über ein GMail-Konto zu senden, und das hat gut funktioniert ... bis jetzt. Aus irgendeinem Grund ist es das Senden von E-Mails gestoppt, und es ist mir diese sehr hilfreich Fehler geben:PearMailer, PHP7 und OpenSSL nicht mit gmail mit unbekanntem Fehler verbinden

[message] => 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:) 

openSSL aktiviert ist, und alle Anmeldeinformationen Ich verwende korrekt sind (ich manuell zu diesem GMail-Konto anmelden können mit Sie).

Dies ist der Code ich verwende, wo $ config die Kontoanmeldeinformationen hält, und die _POST Daten $ von der Kontakt-Form (das Fehlen von sanitization auf sie ignorieren, während ich die Entwicklung bin):

require_once "Mail.php"; 
     $params=array(
      "host"=>"ssl://smtp.gmail.com", 
      "port"=>465, 
      "auth"=>true, 
      "username"=>$config["mailFrom"], 
      "password"=>$config["mailPass"] 
     ); 
     $headers=array(
      "To"=>$config["mailFrom"], 
      "From"=>$_POST['user']." <".$_POST["reply-to"].">", 
      "Content-type"=>"text/html", 
      "Subject"=>$_POST['subject'] 
     ); 
     $mail=Mail::factory("smtp", $params); 
     $sent=$mail->send($config["mailFrom"], $headers, htmlentities($_POST['body'])); 

Es sollte mein GMail-Konto eine E-Mail von sich senden, aber stattdessen gibt es mir den Fehler, den ich oben erwähnt habe. Nach dem Ändern der An und Aus-Adressen, egal was passiert, gibt es mir immer noch diesen Fehler. Das ist besonders merkwürdig, da ich fast den gleichen Code benutzt habe, um Links zum Zurücksetzen des Passworts zu senden, und das funktionierte bis jetzt. Natürlich ist es auch jetzt nicht möglich, eine Verbindung herzustellen.

Ich kann nichts finden, das sagt, dass Google seine Einstellungen geändert hat, und ich habe absolut nicht die Grenze von 2000 Nachrichten pro Tag überschritten, die smtp.gmail.com erlauben soll, also, was ist hier los?

Antwort

0

EDIT:

Ich bin nicht wirklich sicher, ob dies für Sie arbeiten, versuchen:

$params=array(
      "host"=>"smtp.gmail.com", 
      "port"=>587, 
      "auth"=>true, 
      "username"=>$config["mailFrom"], 
      "password"=>$config["mailPass"] 
     ); 

Diese TLS anstelle von SSL verwenden. Versuche es.

+0

Wie bereits erwähnt, ist openssl bereits aktiviert. Das ist nicht das Problem. – IceMetalPunk

+0

Bearbeitet ... hoffe es funktioniert jetzt für Sie .. –

+0

Nun, bekomme ich einen anderen Fehler: '[Nachricht] => Authentifizierungsfehler [SMTP: STARTTLS fehlgeschlagen (Code: 220, Antwort: 2.0.0 Startbereit TLS)] [userinfo] 'Wie bereits erwähnt, habe ich überprüft, dass die Anmeldedaten eigenständig funktionieren. Einige Googler sagen mir, dass PearMailer nicht gut mit PHP5.6 und höher mit TLS funktioniert; Hast du einen Vorschlag für ein besseres SMTP-System für mich? – IceMetalPunk

1

Meine Lösung: von PearMailer zu SwiftMailer gewechselt, und ich setze die SSL-Optionen verify_peer und verify_peer_name auf falsch mit $transport->setStreamOptions. Das scheint jetzt gut zu sein. (Ohne diese Optionen sind anscheinend die SSL-Zertifikate von GMail nicht mit neueren PHP-Versionen kompatibel. Gehen Sie auf die Abbildung.)

+0

php tut keine SSL-Verifikation, es stützt sich auf die SSL-Root-Zertifikate, die vom System dafür akzeptiert werden. Sie müssen Ihren Server reparieren. – cweiske

+0

Würde das ungültige Zertifikat nicht vom GMail-Server kommen, wodurch es zu ihrem Problem wird und ich es nicht mehr unter Kontrolle habe? (Ich habe nicht viel Erfahrung mit SSL-Sicherheit, so dass ich keine Ahnung haben konnte, was ich gerade sage ...) – IceMetalPunk

+0

könnte es, aber die Chancen sind gering. – cweiske