PHPMailer funktioniert nicht?
PHPMailer will einfach nicht. Ich wollte es manuell einfügen, weil ich mit Composer einfach nicht zurecht komme (mir wurde gesagt, es wäre einfacher mit PHPMailer - Blödsinn, wenn ihr mich fragt, es ist 10x schwerer). Das use funktioniert nicht, weshalb
$mail = new PHPMailer(true);
nicht funktioniert.
use 'PHPMailer\PHPMailer\PHPMailer';
use 'PHPMailer\PHPMailer\Exception';
require 'Path\Include\PHPMailer-master\src\Exception.php';
require 'Path\Include\PHPMailer-master\src\PHPMailer.php';
require 'Path\Include\PHPMailer-master\src\SMTP.php';
$mail = new PHPMailer(true);
//$mail->SMTPDebug = 2;
$mail->isSMTP();
$mail->Host = 'smtp.example.de';
$mail->SMTPAuth = true;
$mail->Username = 'example@example.de';
$mail->Password = '';
$mail->SMTPSecure = 'tls';
$mail->Port = port;
$mail->setFrom('example@example.de', 'example');
4 Antworten
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"?
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...
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
Habe PHPMailer nochmal mit Composer installiert
Das neuinstallieren hat übrigens nicht mein problem behoben, es war nur ein versuch es zu beheben
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.
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...
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
Es ist dennoch falsch. Lies die Installationsanleitung auf GitHub und prüfe, ob du alles so befolgt hast, wie es dort steht.
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.
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
Syntax error
unexpected: identifier 'PHPMailer'
after: use
expected: String, (