PHP rocks! wünscht allen Mitgliedern einen guten Rutsch ins neue Jahr 2017 !!!
Hinweis: Das Forum zieht um! Um keine Datenverluste zu haben, schalten wir zwecks Übernahme der Daten das Forum am Sonntag, den 24.04.2016 um ca. 21:00 Uhr offline und passen anschliessend die DNS-Einträge an.
www.php-rocks.de wird euch dann nach den Aktualisierungen der DNS-Server wieder wie gewohnt uneingeschränkt zur Verfügung stehen.
Danke für euer Verständnis!

Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
PHP & E-Mail PHPMailer Version 6 erfolgreich einbinden
#1
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:
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'
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:
Code:
Webroot
   + PHPMailer
       + src
       + language
Vom Webroot ausgehend, wäre eine einfache Möglichkeit, die Zeilen aus der Doku entsprechend anzupassen:
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'
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.  Wink
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
Diesen Autoloader legt ihr nun im Verzeichnis 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'
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.


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  [PHP & E-Mail] HTML Mail versenden mit PHPMailer Arne Drews 0 14.398 29.04.2015, 00:26
Letzter Beitrag: Arne Drews

Gehe zu: