PHPMailer funktioniert nicht?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Also folgendermaßen sollte das funktionieren (ist meine eigene Vorlage wie ich sie selbst regelmäßig benutze, gerade nochmal getestet):

<?php

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

    require $_SERVER['DOCUMENT_ROOT'] . '/libs/PHPMailer/src/Exception.php';
    require $_SERVER['DOCUMENT_ROOT'] . '/libs/PHPMailer/src/PHPMailer.php';
    require $_SERVER['DOCUMENT_ROOT'] . '/libs/PHPMailer/src/SMTP.php';
    
    $mail = new PHPMailer;

    try {
    //Server settings
    $mail->SMTPDebug = 2;         
    $mail->isSMTP();              
    $mail->Host = 'smtp.gmail.com';
    $mail->SMTPAuth = true;
    $mail->Username = 'mein_account@gmail.com';
    $mail->Password = 'passwort';
    $mail->SMTPSecure = 'tls';
    $mail->Port = 587;

    //Recipients
    $mail->setFrom('test@irgendwas.de', 'Mailer');
    $mail->addAddress('meine_email@gmail.com', 'Joe User');

    //Content
    $mail->isHTML(true);
    $mail->Subject = 'Hallo Welt!';
    $mail->Body    = 'Body mit <b>HTML</b>';
    $mail->AltBody = 'Body ohne HTML';

    $mail->send();
    
    } catch (Exception $e) {
        echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
    }

Adressen und PW sind natürlich geändert^^

Das Verzeichnis "PHPMailer" (habe da einfach nur "PHPMailer-master" umbenannt) habe ich selbst immer in "/libs" liegen, welches sich im Document Root (Hauptverzeichnis der Seite) befindet, den Pfad und ggf auch den Namen des Verzeichnisses, wie auch immer das bei dir heißt, müsstest du also noch anpassen.

Sieht auf den ersten Blick so aus, als würde bei dir der Pfad nicht stimmen, oder hast du das wirklich in einem Verzeichnis namens "Path"?

Syntax error

 unexpected:   identifier 'PHPMailer'

 after:   use

 expected:   String, (

0
@leomide

Merkwürdig, bei mir funktioniert das wie gesagt genau so, nur andere PW / Adressen halt.

Hast du vielleicht versucht das z.B. innerhalb einer Funktion oder so zu verwenden? Das mit "use PHPMailer..." etc muss nämlich am Anfang der Datei stehen, nicht in einer Funktion.

Ggf vielleicht mal den obigen Code in eine eigene Datei packen, nichts davor etc und dann testen, denn das sollte wie gesagt genau so funktionieren, hab mir damit eben selbst noch mal eine Testmail geschickt.

Muss auf jeden Fall ein recht seltenes / ungewöhnliches Problem sein, selbst Google spuckt nicht mal ein Ergebnis zu genau diesem Fehler aus...

0
@mastema666

Fatal error: Uncaught Error: Class 'PHPMailer' not found in C:\Pfad\datei.php:70 Stack trace: #0 {main} thrown in C:\Pfad\datei.php on line X

0
@mastema666

Habe PHPMailer nochmal mit Composer installiert

0
@mastema666

Das neuinstallieren hat übrigens nicht mein problem behoben, es war nur ein versuch es zu beheben

0
@leomide

Hast du es denn ursprünglich manuell heruntergeladen / installiert?

Meine Vorlage war nur dafür gedacht, nicht für eine Installation mit Composer. da soll man afaik mit dem Autoloader arbeiten, bei meiner Variante musst du dagegen alle Pfade etc manuell daran anpassen, also wohin du die Dateien entpackt hast.

0

Das require muss auf jeden Fall vor das Use. Wobei das eigentlich überflüssig ist, wenn du den Autoloader verwendest... schaue dir mal das Tutorial an:

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

Spätestens wenn du HTML Mails, Anhänge oder Umlaute nutzt lohnt sich die Verwendung einer solchen Klasse statt einem einfachen mail(), da du nicht mehr selbst codieren musst...

Woher ich das weiß:Beruf – Softwareentwickler & Admin

Also wenn ich in die Dokumentation schaue, sehe ich beim use keine Anführungszeichen. Außerdem würde ich einfach mal hinterfragen, ob der angegebene Pfad dort überhaupt stimmt.

PS.: Bitte formatiere deinen Code künftig lesbar.

Ohne: Syntax error

 unexpected:   identifier 'PHPMailer'

 after:   use

 expected:   String, (

Pfad siehe Kommentar der anderen Antwort

0
@regex9

Die Anleitung überfordert mich :(

0
@leomide

Zuerst ermittelst du den Include-Path oder setzt ihn (http://www.geeksengine.com/article/php-include-path.html) - je nachdem, hauptsache, die Dateien sind unter dem Pfad auffindbar, den du als Argument für require angibst. Würde der include_path bspw. auf einen Ordner x zeigen, würden die Funktionen include oder require auch relativ zu diesem Ordner nach dem beschriebenen Pfad schauen.

Dem folgt die Angabe aller Referenzen, am Anfang der PHP-Datei:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'path/to/PHPMailer/src/Exception.php';
require 'path/to/PHPMailer/src/PHPMailer.php';
require 'path/to/PHPMailer/src/SMTP.php'; // optional

Danach folgt dieser Abschnitt (ab Zeile 10): https://github.com/PHPMailer/PHPMailer#a-simple-example

Wenn es bei use erneut zu einem Fehler kommt, prüfe erst einmal mit der Funktion phpversion, ob wirklich PHP 7 verwendet wird.

0

Welche PHP Version läuft denn bei dir? Und stimmen die Pfade?

PHP 7. Welche Pfade genau? ich habe einfach die Dateien in ein Verzeichnis kopiert und dieses in NetBeans als Include Pfad verlinkt

0

Was möchtest Du wissen?