PHPMail - Fatal error: Uncaught Error: Class not found

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHPMail - Fatal error: Uncaught Error: Class not found

    Folgende Fehlermeldung beim Versuch, PHPMail zu starten:
    "Fatal error: Uncaught Error: Class "vendor\phpMailer\phpmailer\src\phpmailer" not found in C:\xampp\htdocs\m2work\phpmailer_test.php on line 69"
    Obwohl die Klasse da ist, mit
    if (!class_exists('phpmailer'))
    überprüft und bestätigt.

    Versuch auf XAMPP. Hat jemand eine Idee?

    Hier der obere Teil auf des Codes:

    <?php
    // include_path=" ";

    require 'vendor/autoload.php';
    use vendor\phpMailer\phpmailer\src\phpmailer;
    use vendor\phpMailer\phpmailer\src\SMTP;
    use vendor\phpmailer\phpmailer\src\Exception;


    if (!class_exists('phpmailer'))
    {
    echo
    'Klasse existiert -FALSE !class_exists(_phpmailer_) <br>';
    require_once 'C:/xampp/htdocs/vendor/phpmailer/phpmailer/src/phpmailer.php';
    } else echo
    'Klasse existiert -TRUE !class_exists(_phpmailer_) <br>';

    // ================================================== ===============


    // Jetzt noch ein Test, ob die Klasse schon eingebunden ist:

    if (!class_exists('phpmailer'))
    {
    echo
    'Klasse phpmailer existiert -FALSE <br>';
    } else echo
    'Klasse phpmailer existiert -TRUE <br>'; // Diese Meldung wird ausgegeben!
    // ================================================== ===============

    // Klasse PHPMailer aufrufen:

    try {
    // Versuch, eine neue Instanz der Klasse PHPMailer zu erstellen, wobei Ausnahmen aktiviert sind
    $mail = new PHPMailer (true); // <=== HIER FEHLERMELDUNG, dass er die Class nicht findet!
    // (…)
    } catch (Exception $e) {
    echo "Mailer Error: ".$e->getMessage();
    }

    Ich erhalte wie oben gesagt im Browser:

    Fatal error: Uncaught Error: Class "vendor\phpMailer\phpmailer\src\phpmailer" not found in C:\xampp\htdocs\m2work\phpmailer_test.php on line 67

    Hat jemand eine Idee?

    Grüße! Lenno​

  • #2
    Tja, das passiert, wenn man einfach irgendeinen Quellcode kopiert ohne diesen zu verstehen.

    Ich glaube nicht, dass du das Verzeichnis vendor hast, oder?

    Kommentar


    • #3
      Composer hat tatsächlich das Verzeichnis vendor eingerichtet. Darin liegen die Ordner phpmailer und composer sowie die Datei autoload.php

      Ich vermute, dass das Problem im Bereich namespace in anderen Dateien und/oder use liegt.

      Kommentar


      • #4
        Fehler gefunden, es muss im Code heißen;

        use PHPMailer\PHPMailer\PHPMailer;
        use PHPMailer\PHPMailer\SMTP;
        use PHPMailer\PHPMailer\Exception;

        Der Befehl use ist für mich neu und ich hatte beim "Probieren" der Problemlösung den Pfad irgendwann dem realen Pfad angepasst. Warum es damit nicht lief ist mir ein Rätsel.​

        Kommentar


        • #5
          Bin doch noch nicht durch mit dem Fehler.

          Wichtiges Zwischenergebnis:

          Die Funktion
          class_exists('phpmailer')
          gibt FALSE aus, auch wenn die Klasse phpmailer zuvor erfolgreich mit NEW erstellt wurde.

          Kommentar


          • #6
            E-Mail senden scheint so weit zu funktionieren. Nur der Gmail-Server produziert ein timeout. Hat jemand da Einstellungen, die bei ihm funktioniert haben?

            Kommentar


            • #7
              Eine Klasse wird nicht mit New erstellt.
              New erstellt ein Objekt einer klasse.

              Das Ergebnis von class_exists ist lediglich davon abhängig, ob der code, der die Klasse implementiert, bereits geladen wurde und gibt Auskunft darüber, ob du denn mittels New ein entsprechendes Objekt dieser Klasse erstellen könntest.

              spi autoloader werden dabei mit der Standardeinstellung berücksichtigt und es wird automatisch versucht, die klasse zu laden, sofern noch nicht geschehen.

              In deinem letzten Post widersprichst du dir allerdings ein wenig selbst:
              E-Mail senden scheint zu funktionieren
              vs.
              Gmail-Server produziert ein timeout

              was denn nun?

              Weiterhin ist es eher unwahrscheinlich, dass der Gmail-Server ein timeout produziert. Vermutlich meinst du, dass dein Script den Gmail-Server gar nicht erst erreicht, und deswegen mit einem timout "aufgibt".

              Was sind denn deine nicht funktionierenden Einstellungen?

              Kommentar

              Lädt...
              X