it-swarm.com.de

PHPMailer: SMTP-Fehler: Verbindung zum SMTP-Host konnte nicht hergestellt werden

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

39
Ilian Andreev

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.

66
Marten Koetsier

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

48
wessel

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';
10
Viper_Sb

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;
6
Sina

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.

6
Jasper

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;   
4
Ronan Dejhero

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();
1
Dumitru Boaghi

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.

0
David

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.

0
Dinesh Gurjar

Da dies ein verbreiteter Fehler ist, lesen Sie das PHPMailer Wiki zur Fehlerbehebung.

Auch das hat für mich funktioniert 

$mailer->Port = '587';
0
Francis Sunday
$mail->SMTPDebug = 2; // to see exactly what's the issue

In meinem Fall hat dies geholfen:

$mail->SMTPSecure = false;
$mail->SMTPAutoTLS = false;
0
Martin Zvarík