PHPMailer auf Webhosting installieren

  • Hallo,


    ich bin in Puncto PHP leider noch ein ziemlicher Anfänger. Ich versuche gerade verzweifelt PHPMailer auf eine meiner Webseiten (Webhosting Sommer 2019) zu integrieren.


    Vorgeschichte:

    ich hatte eine funktionierende Kontaktform mit einem sehr einfachen PHP-Skript. Das hat auch so lange funktioniert, bis ich die ganze Geschichte in Cloudlfare eingebunden habe. danach ging dann keine Email über die Kontaktform keine Emails mehr raus. Habe daraufhin die Seite erstmal wieder von Cloudflare runtergenommen und die standard Netcup Nameserver und DNS-Records wieder eingetragen. Emails gingen aber immer noch nicht. Habe dann gelesen, dass man für solche Sachen besser PHPMailer nehmen sollte. -->


    Was bisher geschah:

    Da ich keine Ahnung habe, wie ich PHPMailer über composer auf dem Webhosting installieren soll, habe ich die Dateien direkt von Github runtergeladen und im /httpdocs/ Unterordner der entsprechenden Webseite installiert. Das macht offensichtlich keinen Sinn, da ich die entsprechenden PHP-Dateien (PHPMailer.php, SMTP.php und Exception.php) in einen include_path schieben muss (soweit ich das verstehe). Also habe ich folgende Verzeichnisstruktur angelegt: /httpdocs/resources/includes/ <-- dort habe ich die PHP-Dateien von PHPMailer reingepackt. den Includepath habe ich für die entsprechende Webseite wie folgt eingetragen: .:/httpdocs/resources/includes/


    Wo ich jetzt stehe:

    Sobald ich meine Kontaktform auf meiner HTML-Webseite abschicke und auf die entsprechende PHP-Datei zum verarbeiten sende, bricht mir das ganze ab. Die Fehlermeldungen sagen folgendes:


    Warning: require(PHPMailer.php): failed to open stream: No such file or directory in /var/www/vhosts/XXX.XXX.netcup.net/httpdocs/XXX/mail_alternative.php on line 10


    Warning: require(PHPMailer.php): failed to open stream: No such file or directory in /var/www/vhosts/XXX.XXX.netcup.net/httpdocs/XXX/mail_alternative.php on line 10


    Fatal error: require(): Failed opening required 'PHPMailer.php' (include_path='.:/httpdocs/resources/includes/') in /var/www/vhosts/XXX.XXX.netcup.net/httpdocs/XXX/mail_alternative.php on line 10


    Unten angefügt ist meine PHP-Datei zum verarbeiten der Mails.


    Nun meine Frage: Was mache ich Falsch8o


  • Fatal error: require(): Failed opening required 'PHPMailer.php' (include_path='.:/httpdocs/resources/includes/') in /var/www/vhosts/XXX.XXX.netcup.net/httpdocs/XXX/mail_alternative.php on line 10

    Kommt Dir an dem Include-Path da oben nicht irgendetwas spanisch vor? (Tipp: ".:" oder ":.")?

  • Wenn die Datei mail_alternative.php in /httpdocs/XXX/ liegt, kannst du die Dateien PHPMailer.php, SMTP.php und Exception.php z.B. nach /httpdocs/XXX/PHPMailer verschiedenen und passt in mail_alternative.php die require Pfade an:


    PHP
    require 'PHPMailer/PHPMailer.php';
    require 'PHPMailer/SMTP.php';
    require 'PHPMailer/Exception.php';
  • Kommt Dir an dem Include-Path da oben nicht irgendetwas spanisch vor? (Tipp: ".:" oder ":.")?

    Ich stehe generell bei dem Thema include_path auf dem Schlauch ;-). Habe nochmal die Standardeinstellung angeschaut. Da steht .:/usr/local/php73/share/php73 also passt doch ".:" oder muss ich hier ":." nehmen?

  • Wenn die Datei mail_alternative.php in /httpdocs/XXX/ liegt, kannst du die Dateien PHPMailer.php, SMTP.php und Exception.php z.B. nach /httpdocs/XXX/PHPMailer verschiedenen und passt in mail_alternative.php die require Pfade an:


    PHP
    require 'PHPMailer/PHPMailer.php';
    require 'PHPMailer/SMTP.php';
    require 'PHPMailer/Exception.php';

    OK, das werde ich dann probieren. Brauche ich dann die ganzen Zeilen mit 'use PHPMailer\PHPMailer...' usw. überhaupt?

  • Die eigentliche Antwort: Nein.

    Die Antwort für dich: Ja, brauchst du.

    Sehr salomonisch!

    Ich stehe generell bei dem Thema include_path auf dem Schlauch ;-). Habe nochmal die Standardeinstellung angeschaut. Da steht .:/usr/local/php73/share/php73 also passt doch ".:" oder muss ich hier ":." nehmen?

    RTFM? -> https://www.php.net/manual/en/function.set-include-path.php; siehe letzter Kommentar über das Trennzeichen ":".

    Der "." am Anfang ist in Deinem Fall nicht relevant. ":" ist das Trennzeichen. Darauf folgt bei Dir der Pfad "/httpdocs/resources/includes/". Wie Du am Defaultwert richtig erkannt hast, ist der Bezugspunkt das Stammverzeichnis "/" auf der Platte.


    Wenn Du das jetzt mit der Fehlermeldung vergleichst: „No such file or directory in /var/www/vhosts/XXX.XXX.netcup.net/httpdocs/XXX/mail_alternative.php on line 10“, kannst Du Dir alle Antworten selber geben :)


    Hausübung: erstelle einen include_path, der den Defaultwert und die von Dir benötigten Include-Verzeichnisse beinhaltet. Wie sieht der aus?

  • Besten Dank für das pushen in die richtige Richtung.


    Zuerst zur Hausübung: .:/usr/local/php73/share/php73:/httpdocs/resources/includes/


    Habe nun die entsprechenden PHP-Dateien auch in das entsprechende Verzeichnis der Webseite reinkopiert und jetzt funktioniert das auch.


    Vielen vielen dank für die Zeit, Geduld und schnelle Hilfe :thumbup:.