it-swarm.com.de

Mail wird nicht mit PHPMailer über SSL mit SMTP gesendet

Ich versuche, PHPMailer zum Versenden von E-Mails über SMTP zu verwenden, hatte bisher jedoch kein Glück. Ich habe eine Reihe von SO - Fragen, PHPMailer-Tutorials und Forenbeiträgen durchlaufen, kann es aber immer noch nicht zum Laufen bringen. Ich werde so viele meiner fehlgeschlagenen Versuche dokumentieren, wie ich mich erinnern kann, um Zeit zu sparen, aber hier ist zunächst der Code, den ich verwende:

<?php
    session_start();
    error_reporting(E_ALL);
    ini_set('display_errors','On');

    require('includes/class.phpmailer.php');
    include('includes/class.smtp.php');
    $mail = new PHPMailer(); 

    $name = $_POST["name"];
    $guests = $_POST["guests"];
    $time = $_POST["time"];

    $message = "<h1>".$name." has booked a table for ".$guests." at ".$time."</h1>";

    $mail->IsSMTP(); // telling the class to use SMTP
    $mail->Host       = "ssl://smtp.gmail.com"; // SMTP server
    $mail->SMTPDebug  = 1;                     // enables SMTP debug information (for testing)
    $mail->SMTPAuth   = true;                  // enable SMTP authentication
    $mail->Port       = 26;                    // set the SMTP port for the GMAIL server
    $mail->Username   = "[email protected]"; // SMTP account username
    $mail->Password   = "myPassword";        // SMTP account password
    $mail->SetFrom('[email protected]', 'James Cushing');
    $mail->AddReplyTo("[email protected]","James Cushing");
    $mail->Subject    = "PHPMailer Test Subject via smtp, basic with authentication";
    $mail->AltBody    = "To view the message, please use an HTML compatible email viewer!";
    $mail->MsgHTML($message)
    $address = "[email protected]";
    $mail->AddAddress($address, "James Cushing");

    if(!$mail->Send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
    } else {
        echo "Message sent!";
    }
?>

Erstens, wenn ich diesen Code jetzt laufe, bekomme ich zwei verschiedene Fehler. Auf meinem lokalen Server bekomme ich die Fehlermeldung:
SMTP -> ERROR: Verbindung zum Server fehlgeschlagen: Zeitüberschreitung beim Vorgang (60)
.__ Die folgende Absenderadresse ist fehlgeschlagen: [email protected]: Angerufene Mail () ohne Verbindung
Mailer-Fehler: Die folgende Absenderadresse ist fehlgeschlagen: [email protected]: Angerufene Mail () ohne Verbindung

Ich bekomme mehr oder weniger denselben Fehler, wenn derselbe Code auf meinem Webserver ausgeführt wird, aber die erste Zeile lautet:
SMTP -> ERROR: Verbindung zum Server fehlgeschlagen: Netzwerk ist nicht erreichbar (101)

Natürlich lohnt es sich, darauf hinzuweisen, dass ich nicht das wörtliche "[email protected]" verwende, aber ich habe meine eigene E-Mail-Adresse für diesen Post ersetzt.

Dinge, die ich probiert habe
- Verwendung des iCloud SMTP-Servers
- Einen anderen Port verwenden
- Aktivieren der OpenSSL-Erweiterung in meiner php.ini-Datei
- Kopieren von Code aus verschiedenen PHPMailer-Beispielen
- Verwendung des "DisplayUnlockCaptcha" -Systems von Google zum Aktivieren von Verbindungen
- Senden an und von verschiedenen Adressen - Entfernen von "@ gmail.com" aus der Username-Eigenschaft - Einige andere Dinge, an die ich mich nicht erinnern kann

Das hat mich jetzt für etwa einen Tag wahnsinnig gemacht, also wenn jemand es lösen kann, werden sie ein Held sein.

Vielen Dank

6
James Cushing
$mail->IsSMTP();
$mail->Host = "smtp.gmail.com";
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";
$mail->Username = "[email protected]";
$mail->Password = "**********";
$mail->Port = "465";

Das ist eine funktionierende Konfiguration.

versuchen Sie zu ersetzen, was Sie haben

30
ybert

Verwenden Sie kein SSL an Port 465, es wurde seit 1998 nicht mehr verwendet und wird nur von Microsoft-Produkten verwendet, die das Memo nicht erhalten haben. Verwenden Sie stattdessen TLS an Port 587: Der folgende Code sollte also sehr gut für Sie funktionieren.

mail->IsSMTP(); // telling the class to use SMTP
$mail->Host       = "smtp.gmail.com"; // SMTP server

$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->SMTPSecure = "tls";                 // sets the prefix to the servier
$mail->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server
$mail->Port       = 587;                   // set the SMTP port for the 
3
Asuquo12

Verwenden Sie zunächst diese Einstellungen für Google:

$mail->IsSMTP();
$mail->Host = "smtp.gmail.com";
$mail->SMTPAuth = true;
$mail->SMTPSecure = "tls"; //edited from tsl
$mail->Username = "myEmail";
$mail->Password = "myPassword";
$mail->Port = "587";

Aber auch welche Firewall hast du eingerichtet?

Wenn Sie TCP - Ports 465/995 und vielleicht 587 herausfiltern, müssen Sie einige Ausnahmen konfigurieren oder sie von Ihrer Regelnliste nehmen.

https://github.com/PHPMailer/PHPMailer/wiki/Fehlerbehebung

2
jacob21

Ich habe einen ähnlichen Fehler mit SMTP erhalten, wenn mein Client-Computer die Netzwerkverbindung wechselt (z. B. Heimnetzwerk oder Büro im Büro) und der Neustart des Netzwerkdienstes (oder Neustarten des Computers) das Problem für mich löst. Nicht sicher, ob dies auf Ihren Fall zutreffen würde, aber nur für den Fall.

Sudo /etc/init.d/networking restart   # for ubuntu
1
user1533634

Zunächst hat Google die Funktion "Weniger sichere Konten verwenden" erstellt:

https://myaccount.google.com/security

Dann erstellt die andere Berechtigung:

https://accounts.google.com/b/0/DisplayUnlockCaptcha

Ich hoffe es hilft.

0
Andre Mesquita