Ich habe PHPMailer für mehrere Projekte verwendet, aber jetzt bin ich festgefahren. Es gibt mir den Fehler:
SMTP-Fehler: Verbindung zum SMTP-Host konnte nicht hergestellt werden.
Ich habe versucht, E-Mails von Thunderbird zu versenden, und es funktioniert! Aber nicht über PHPMailer ... Hier sind die Einstellungen von Thunderbird:
Servername: mail.exampleserver.com
Port: 587
Benutzername: [email protected]
Sichere Authentifizierung: Nein
Verbindungssicherheit: STARTTLS
Ich habe diese mit dem Server in meinem letzten Projekt verglichen, in dem ich PHPMailer verwendet habe.
Servername: mail.exampleserver2.com
Port: 465
Benutzername: [email protected]
Sichere Authentifizierung: Nein
Verbindungssicherheit: SSL/TLS
Mein PHP-Code lautet:
$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 bin ich falsch
Da diese Frage in Google hoch erscheint, möchte ich Ihnen hier meine Lösung für den Fall mitteilen, in dem PHP gerade auf Version 5.6 aktualisiert wurde (was ein strengeres SSL-Verhalten hat).
Das PHPMailer-Wiki enthält einen Abschnitt dazu:
https://github.com/PHPMailer/PHPMailer/wiki/Fehlerbehebung#php-56-certificate-verification-failure
Die empfohlene Problemumgehung enthält den folgenden Code:
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
Dies sollte für PHPMailer 5.2.10 (und höher) funktionieren.
Anmerkung: Offensichtlich und auch wie in diesem Wiki vorgeschlagen, sollte dies eine temporäre Lösung sein!
Die korrekte Lösung besteht darin, das ungültige, falsch konfigurierte oder selbstsignierte Zertifikat durch ein gutes zu ersetzen.
In meinem Fall war es die fehlende SSL-Unterstützung in PHP, die zu diesem Fehler führte.
Also habe ich extension = php_openssl.dll aktiviert.
$mail->SMTPDebug = 1;
wies auch auf diese Lösung hin.
Update 2017
$mail->SMTPDebug = 2;
, siehe: https://github.com/PHPMailer/PHPMailer/wiki/Fehlerbehebung#enabling-debug-output
Ihr Problem ist höchstwahrscheinlich das
Verbindungssicherheit: STARTTLS Verbindungssicherheit: SSL/TLS
Dies sind zwei verschiedene Protokolle, verwenden Sie das richtige Protokoll, was auch immer Sie in Thunderbird verwenden müssen.
Versuchen Sie, die Variable einzustellen:
// if you're using SSL
$mail->SMTPSecure = 'ssl';
// OR use TLS
$mail->SMTPSecure = 'tls';
Ich hatte das gleiche Problem und es war, weil PHPMailer erkannte, dass der Server STARTTLS unterstützte, und versuchte, die Verbindung automatisch auf eine verschlüsselte Verbindung zu aktualisieren. Mein Mail-Server befindet sich im selben Subnetz wie der Webserver in meinem Netzwerk, der sich alle hinter unseren Domain-Firewalls befindet. Ich mache mir also keine Sorgen um die Verschlüsselung (und die generierten E-Mails enthalten ohnehin keine sensiblen Daten).
Also habe ich das SMTPAutoTLS in der Datei class.phpmailer.php in false geändert.
/**
* 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;
Ich hatte ein ähnliches Problem und stellte fest, dass es die openssl.cafile
-Konfigurationsanweisung in php.ini
war, die gesetzt werden musste, um die Überprüfung sicherer Peers zu ermöglichen. Sie müssen nur den Speicherort einer Zertifizierungsstellendatei festlegen, wie unter http://curl.haxx.se/docs/caextract.html .
Diese Direktive ist ab PHP 5.6 neu, daher hat mich das beim Upgrade von PHP 5.5 überrascht.
gibt es mail.exampleserver.com? Wenn nicht, versuchen Sie den folgenden Code (Sie müssen über ein Google Mail-Konto verfügen).
$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;
Folgender Code funktionierte für mich:
$mail = new PHPMailer(true);
$mail->isSMTP();// Set mailer to use SMTP
$mail->CharSet = "utf-8";// set charset to utf8
$mail->SMTPAuth = true;// Enable SMTP authentication
$mail->SMTPSecure = 'tls';// Enable TLS encryption, `ssl` also accepted
$mail->Host = 'smtp.gmail.com';// Specify main and backup SMTP servers
$mail->Port = 587;// TCP port to connect to
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
$mail->isHTML(true);// Set email format to HTML
$mail->Username = 'Sender Email';// SMTP username
$mail->Password = 'Sender Email Password';// SMTP password
$mail->setFrom('[email protected]', 'John Smith');//Your application NAME and EMAIL
$mail->Subject = 'Test';//Message subject
$mail->MsgHTML('HTML code');// Message body
$mail->addAddress('User Email', 'User Name');// Target email
$mail->send();
Ich hatte ein ähnliches Problem. Ich hatte PHPMailer Version 1.72 installiert, die nicht für die Verwaltung von SSL-Verbindungen vorbereitet ist. Ein Upgrade auf die letzte Version hat das Problem behoben.
In meinem Fall in CPANEL habe ich die Option "Mail-IDs registrieren", bei der ich meine E-Mail-Adresse hinzufüge. Nach 30 Minuten funktioniert sie problemlos mit der einfachen PHP-Mail-Funktion.
Da dies ein verbreiteter Fehler ist, lesen Sie das PHPMailer Wiki zur Fehlerbehebung.
Auch das hat für mich funktioniert
$mailer->Port = '587';
$mail->SMTPDebug = 2; // to see exactly what's the issue
In meinem Fall hat dies geholfen:
$mail->SMTPSecure = false;
$mail->SMTPAutoTLS = false;