31.01.2018, 01:38
Dieser Beitrag wurde zuletzt bearbeitet: 31.01.2018, 02:24 von Arne Drews.
Wie binde ich den PHPMailer Version 6 in mein Projekt ein?
Ok, bevor ich euch zeige, wie der PHPMailer Version 6 auf einfache Weise eingebunden werden kann, lasst mich ein paar Worte zu einem Thema verlieren, das mir in vielen Foren ziemlich gegen den Strich geht: composer.
Nicht, dass ihr mich falsch versteht, composer ist ein klasse Tool... Da wo man es benötigt, allerdings nur.
Über Tutorials, wie dieses werden sicher keine Fortgeschrittenen versuchen eine Klasse, wie den PHPMailer in ihre Projekte einzubinden. Zumindest war meine gedachte Zielgruppe der Einsteiger/Anfänger mit wenig Erfahrungen. Und warum soll der bitte schön immer gleich composer als Allheilmittel verwenden? Ich behaupte nicht, dass ich ein besonders herausragender PHP-Entwickler bin, denn grundsätzlich ist das auch nur ein Hobby von mir. Aber ich kann dennoch behaupten, auch schon Projekte mittlerer Größe umgesetzt zu haben, ohne dass ich diese Tools vermisst hätte.
Da es aber scheinbar zeitgemäß ist, neue Versionen von PHP-Klassen mit composer zu installieren, wird dem Einsteiger/Anfänger damit wieder alles schwerer gemacht, denn sind wir mal ehrlich: Wer schon Probleme hat, Klassen wie den PHPMailer einzubinden, wird sicherlich weitaus mehr Probleme haben, composer erstmal an den Start zu bringen! Und das ist nicht abwertend gemeint, sondern einfach nur ehrlich...
Aber genug davon, lasst uns loslegen!
Was mach ich ohne composer?
In der Version 5 des PHPMailer war das Einbinden ein klein wenig einfacher, da es dort einen eigenen Autoloader gibt. In Version 6 verlässt man sich auf den Autoloader von... na wer weiß es... na klar: composer! Ok, war das letzte Mal, dass ich den hier erwähnt habe, versprochen!
Also grundsätzlich sagt die Doku aus, dass ein manuelles Einbinden auch auf folgende Weise geschehen kann:
Das setzt allerdings lt. Doku voraus, dass wir die Klasse in unseren include_path schieben. Den meisten Anfänger dürften hier bereits die ersten Fragezeichen erscheinen.
Also vergessen wir das und erklären das mal auf ähnliche Weise. Ich gehe davon aus, dass ihr einen Webspace habt, auf den ihr das heruntergeladene PHPMailer-Verzeichnis laden könnt.
Das Resultat sollte dann diesem Schema entsprechen:
Vom Webroot ausgehend, wäre eine einfache Möglichkeit, die Zeilen aus der Doku entsprechend anzupassen:
Grundsätzlich sollte das nach der Methode bereits funktionieren und ihr könnt beim eigentlichen Tutorial beim Abschnitt Wie verwende ich das jetzt weitermachen.
Alternative: Ein eigener Autoloader
Zugegeben, die Variante bringt jetzt keinen grundsätzlich entscheidenden Vorteil, aber ich finde die persönlich charmant genug, um sie trotzdem zu erwähnen.
Ich mag das Autoloading-Prinzip und habe für meine Projekte die eigenen Autoloader entsprechend für die Verwendung des PHPMailer angepasst. Da dies Tutorial natürlich nichts mit meinen Projekten zu tun hat, habe ich das Ganze mal entkoppelt und stelle eine mögliche Version für Interessierte gerne hier zur Verfügung:
Diesen Autoloader legt ihr nun im Verzeichnis
Dann sieht unsere Implementierung des PHPMailer nur noch wie folgt aus:
Alles weitere ist dann wieder nahezu identisch mit dem Original-Tutorial, ab Abschnitt Wie verwende ich das jetzt?".
Ich hoffe, ich konnte dem Einen oder Anderen ein wenig Hilfe bieten, beim Einbinden des PHPMailer.
Feedback oder Fragen gerne hier im Forum.
Ok, bevor ich euch zeige, wie der PHPMailer Version 6 auf einfache Weise eingebunden werden kann, lasst mich ein paar Worte zu einem Thema verlieren, das mir in vielen Foren ziemlich gegen den Strich geht: composer.
Nicht, dass ihr mich falsch versteht, composer ist ein klasse Tool... Da wo man es benötigt, allerdings nur.
Über Tutorials, wie dieses werden sicher keine Fortgeschrittenen versuchen eine Klasse, wie den PHPMailer in ihre Projekte einzubinden. Zumindest war meine gedachte Zielgruppe der Einsteiger/Anfänger mit wenig Erfahrungen. Und warum soll der bitte schön immer gleich composer als Allheilmittel verwenden? Ich behaupte nicht, dass ich ein besonders herausragender PHP-Entwickler bin, denn grundsätzlich ist das auch nur ein Hobby von mir. Aber ich kann dennoch behaupten, auch schon Projekte mittlerer Größe umgesetzt zu haben, ohne dass ich diese Tools vermisst hätte.
Da es aber scheinbar zeitgemäß ist, neue Versionen von PHP-Klassen mit composer zu installieren, wird dem Einsteiger/Anfänger damit wieder alles schwerer gemacht, denn sind wir mal ehrlich: Wer schon Probleme hat, Klassen wie den PHPMailer einzubinden, wird sicherlich weitaus mehr Probleme haben, composer erstmal an den Start zu bringen! Und das ist nicht abwertend gemeint, sondern einfach nur ehrlich...
Aber genug davon, lasst uns loslegen!
Was mach ich ohne composer?
In der Version 5 des PHPMailer war das Einbinden ein klein wenig einfacher, da es dort einen eigenen Autoloader gibt. In Version 6 verlässt man sich auf den Autoloader von... na wer weiß es... na klar: composer! Ok, war das letzte Mal, dass ich den hier erwähnt habe, versprochen!
Also grundsätzlich sagt die Doku aus, dass ein manuelles Einbinden auch auf folgende Weise geschehen kann:
Doku-Zitat: https://github.com/PHPMailer/PHPMailer
PHP-Code:
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';
Also vergessen wir das und erklären das mal auf ähnliche Weise. Ich gehe davon aus, dass ihr einen Webspace habt, auf den ihr das heruntergeladene PHPMailer-Verzeichnis laden könnt.
Das Resultat sollte dann diesem Schema entsprechen:
Code:
Webroot
+ PHPMailer
+ src
+ language
PHP-Code:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require __DIR__ . '/PHPMailer/src/Exception.php';
require __DIR__ . '/PHPMailer/src/PHPMailer.php';
require __DIR__ . '/PHPMailer/src/SMTP.php';
Alternative: Ein eigener Autoloader
Zugegeben, die Variante bringt jetzt keinen grundsätzlich entscheidenden Vorteil, aber ich finde die persönlich charmant genug, um sie trotzdem zu erwähnen.

Ich mag das Autoloading-Prinzip und habe für meine Projekte die eigenen Autoloader entsprechend für die Verwendung des PHPMailer angepasst. Da dies Tutorial natürlich nichts mit meinen Projekten zu tun hat, habe ich das Ganze mal entkoppelt und stelle eine mögliche Version für Interessierte gerne hier zur Verfügung:
Hinweis
Bitte bedenkt, dass für die Verwendung des folgenden Code eine PHP Version ab 7.0 notwendig ist!PHP-Code:
class PHProcksAutoloader {
private $PathTemplate = __DIR__ . '/src/{{CLASS_NAME}}.php';
public function __construct() {
spl_autoload_register( [$this, 'Prepare'] );
}
private function Prepare( $class_name ) : bool {
$this->NamespaceRoute = explode( '\\', $class_name );
$this->ClassName = end( $this->NamespaceRoute );
return $this->Load();
}
private function Load() : bool {
if ( !$this->ClassExists() )
return false;
return include_once $this->GetClassPath();
}
private function GetClassPath() : string {
return str_replace( '{{CLASS_NAME}}', $this->ClassName, $this->PathTemplate );
}
private function ClassExists() : bool {
return file_exists( $this->GetClassPath() );
}
}
$oLoader = new PHProcksAutoloader;
PHPMailer
ab, bspw. als PHProcksAutoloader.php
.Dann sieht unsere Implementierung des PHPMailer nur noch wie folgt aus:
PHP-Code:
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
include_once __DIR__ . '/PHPMailer/PHProcksAutoloader.php';
Ich hoffe, ich konnte dem Einen oder Anderen ein wenig Hilfe bieten, beim Einbinden des PHPMailer.
Feedback oder Fragen gerne hier im Forum.