2010-08-13 19 views
30

Ich habe PHPMailer bei mehreren Projekten verwendet, aber jetzt stecke ich fest. Es gibt mir den Fehler:
SMTP-Fehler: Verbindung zum SMTP-Host konnte nicht hergestellt werden.
Ich habe versucht, E-Mail von Thunderbird zu senden und es funktioniert! Aber nicht durch PHPMailer ... Hier sind die Einstellungen von Thunderbird:PHPMailer: SMTP Fehler: Verbindung zum SMTP-Host konnte nicht hergestellt werden

Servername: mail.exampleserver.com
Hafen: 587
Benutzername: [email protected]
Sichere Authentifizierung: Keine
Verbindung Sicherheit: STARTTLS

ich habe diese mit dem Server bei meinem letzten Projekt verglichen, wo ich PHPMailer verwendet und sie waren:

Servername: mail.exampleserver2.com
Hafen: 465
Benutzername: [email protected]
Sichere Authentifizierung: Nein
Verbindungssicherheit: SSL/TLS

Mein PHP-Code ist:

$mail = new PHPMailer(); 
$mail->IsSMTP(); // send via SMTP 
$mail->Host = SMTP_HOST; // SMTP servers 
$mail->Port = SMTP_PORT; // SMTP servers 
$mail->SMTPAuth = true; // turn on SMTP authentication 
$mail->Username = SMTP_USER; // SMTP username 
$mail->Password = SMTP_PASSWORD; // SMTP password 
$mail->From = MAIL_SYSTEM; 
$mail->FromName = MAIL_SYSTEM_NAME; 
$mail->AddAddress($aSecuredGetRequest['email']); 
$mail->IsHTML(true); // send as HTML 

Wo liege ich falsch?

+0

http://stackoverflow.com/questions/42471693/phpmailer-using-gmail-gives-error/42472146?noredirect=1#comment72085437_42472146 –

Antwort

10

Ihr Problem ist höchstwahrscheinlich die

Verbindungssicherheit: STARTTLS Verbindungssicherheit: SSL/TLS

Das sind zwei verschiedene Protokolle, sind Sie die richtige Verwendung, was auch immer man Sie in Thunderbird verwenden sind muss verwendet werden.

Versuchen Sie, die Stellgröße:

// if you're using SSL 
$mail->SMTPSecure = 'ssl'; 
// OR use TLS 
$mail->SMTPSecure = 'tls'; 
4

ist mail.exampleserver.com vorhanden ??? , wenn nicht versuchen Sie den folgenden Code (Sie müssen Google Mail-Konto haben)

$mail->SMTPSecure = "ssl"; 
$mail->Host='smtp.gmail.com'; 
$mail->Port='465'; 
$mail->Username = '[email protected]'; // SMTP account username 
$mail->Password = 'your gmail password'; 
$mail->SMTPKeepAlive = true; 
$mail->Mailer = "smtp"; 
$mail->IsSMTP(); // telling the class to use SMTP 
$mail->SMTPAuth = true;     // enable SMTP authentication 
$mail->CharSet = 'utf-8'; 
$mail->SMTPDebug = 0; 
42

In meinem Fall war es ein Mangel an SSL-Unterstützung in PHP, die diesen Fehler gab.

So ermöglichte ich extension = php_openssl.dll

$mail->SMTPDebug = 1; auch zu dieser Lösung angedeutet.

-Update 2017

$mail->SMTPDebug = 2; finden Sie unter: https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#enabling-debug-output

+1

diese PHP-Erweiterung Enabling (WAMP Menüoption) war was ich brauchte. Danke. – jwinn

+0

Du bist mein Held. Ich habe seit Stunden mit E-Mails auf meinem lokalen Host gekämpft, aber das hat alle meine Probleme gelöst! –

+0

Es hat mir viel Zeit gespart! – Bronek

0

hatte ich ein ähnliches Problem. Ich hatte PHPMailer Version 1.72 installiert, die nicht bereit ist, SSL-Verbindungen zu verwalten. Das Upgrade auf die letzte Version hat das Problem gelöst.

6

Ich hatte ein ähnliches Problem und herausgefunden, dass es die openssl.cafile Konfigurations-Richtlinie in php.ini war, die gesetzt werden musste, um die Überprüfung von sicheren Peers zu ermöglichen. Sie legen es einfach auf den Speicherort einer Zertifizierungsstellendatei fest, wie Sie sie unter http://curl.haxx.se/docs/caextract.html erhalten.

Diese Direktive ist neu ab PHP 5.6, was mich bei der Aktualisierung von PHP 5.5 überrascht hat.

+0

Ich bin in der gleichen Ausgabe, mit PHP5.6, wenn ich Peer-Verifikation gesetzt in Phpmailer-E-Mails auf falsch gesetzt emails geht in Spam-Ordner, Irgendwelche Idee, wie kann ich den Zertifikatsweg setzen? Wo bekomme ich das Zertifikat? in Debian 8 VPS –

+0

Thx. Für mich hat das geklappt. Das ist: cd /etc/php5&&wget https://curl.haxx.se/ca/cacert.pem&& echo "openssl.cafile = /etc/php5/cacert.pem" >>/etc/php5/apache2/php.ini –

33

Da diese Frage in Google hoch auftaucht, möchte ich hier meine Lösung für den Fall, dass PHP nur auf Version 5.6 (die strenger SSL-Verhalten hat) aktualisiert haben.

Der PHPMailer Wiki einen Abschnitt über das hat:

https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting#php-56-certificate-verification-failure

Die vorgeschlagene Abhilfe das folgende Stück Code ist inklusive:

$mail->SMTPOptions = array(
    'ssl' => array(
     'verify_peer' => false, 
     'verify_peer_name' => false, 
     'allow_self_signed' => true 
    ) 
); 

Dies sollte 5.2.10 für PHPMailer arbeiten (und oben).

Hinweis: Offensichtlich und auch wie in diesem Wiki vorgeschlagen, sollte dies eine temporäre Lösung sein!

The correct fix for this is to replace the invalid, misconfigured or self-signed certificate with a good one.

+3

Sie, mein Herr, rettete mein Leben! –

+2

Dies ist die beste Antwort für diejenigen, die mit Localhost Mailing Probleme haben und sich selbst signieren. – andromeda

+0

Aus irgendeinem Grund hat es funktioniert –

2

Ich hatte das gleiche Problem und es war, weil PHPMailer erkannte den Server unterstützt STARTTLS so versuchte es, die Verbindung automatisch auf eine verschlüsselte Verbindung zu aktualisieren. Mein E-Mail-Server befindet sich im selben Subnetz wie der Webserver in meinem Netzwerk, der hinter unseren Domain-Firewalls steht. Daher mache ich mir keine Sorgen über die Verschlüsselung (und die generierten E-Mails enthalten ohnehin keine sensiblen Daten).

Also was ich vorangegangen bin und getan habe, war die SMTPAutoTLS in der Datei class.phpmailer.php in false zu ändern.

/** 
* Whether to enable TLS encryption automatically if a server supports it, 
* even if `SMTPSecure` is not set to 'tls'. 
* Be aware that in PHP >= 5.6 this requires that the server's certificates are valid. 
* @var boolean 
*/ 
public $SMTPAutoTLS = false; 
0

Da dies ein verbreiteter Fehler ist, überprüfen Sie die PHPMailer Wiki zur Fehlerbehebung aus.

Auch arbeitete für mich

$mailer->Port = '587'; 
Verwandte Themen