Viele PHP-Entwickler müssen von ihrem Code aus E-Mails senden. Die einzige PHP-Funktion, die dies direkt unterstützt, ist mail()
. Es bietet jedoch keine Unterstützung für die Nutzung beliebter Funktionen wie Verschlüsselung, Authentifizierung, HTML-Nachrichten und Anhänge.
E-Mails richtig zu formatieren ist überraschend schwierig. Es gibt unzählige sich überschneidende (und widersprüchliche) Standards, die die strikte Einhaltung schrecklich komplizierter Formatierungs- und Kodierungsregeln erfordern – der Großteil des Codes, den Sie online finden und der die Funktion mail()
direkt verwendet, ist einfach falsch, wenn nicht sogar unsicher!
Die PHP-Funktion mail()
sendet normalerweise über einen lokalen Mailserver, der auf Linux-, BSD- und macOS-Plattformen normalerweise von einer sendmail
Binärdatei begleitet wird. Windows enthält jedoch normalerweise keinen lokalen Mailserver. Der integrierte SMTP-Client von PHPMailer ermöglicht den E-Mail-Versand auf allen Plattformen, ohne dass ein lokaler Mailserver erforderlich ist. Beachten Sie jedoch, dass die Funktion mail()
nach Möglichkeit vermieden werden sollte. Es ist sowohl schneller als auch sicherer, SMTP für Localhost zu verwenden.
Lassen Sie sich bitte nicht dazu verleiten, es selbst zu tun – wenn Sie PHPMailer nicht verwenden, gibt es viele andere hervorragende Bibliotheken, die Sie sich ansehen sollten, bevor Sie Ihre eigene erstellen. Probieren Sie SwiftMailer, Laminas/Mail, ZetaComponents usw.
Diese Software wird unter der LGPL 2.1-Lizenz und dem GPL Cooperation Commitment vertrieben. Bitte lesen Sie LIZENZ für Informationen zur Softwareverfügbarkeit und -verteilung.
PHPMailer ist auf Packagist verfügbar (mit semantischer Versionierung), und die Installation über Composer ist die empfohlene Methode zur Installation von PHPMailer. Fügen Sie einfach diese Zeile zu Ihrer composer.json
Datei hinzu:
"phpmailer/phpmailer" : " ^6.9.2 "
oder laufen
composer require phpmailer/phpmailer
Beachten Sie, dass der vendor
-Ordner und das vendor/autoload.php
-Skript von Composer generiert werden. Sie sind nicht Teil von PHPMailer.
Wenn Sie die XOAUTH2-Authentifizierung verwenden möchten, müssen Sie auch eine Abhängigkeit vom league/oauth2-client
und dem entsprechenden Service-Adapter-Paket in Ihrer composer.json
hinzufügen oder einen Blick auf den SendOauth2-Wrapper von @decomplexity werfen, insbesondere wenn Sie dies tun Nutzung von Microsoft-Diensten.
Wenn Sie Composer nicht verwenden, können Sie alternativ PHPMailer als ZIP-Datei herunterladen (beachten Sie, dass Dokumente und Beispiele nicht in der ZIP-Datei enthalten sind) und dann den Inhalt des PHPMailer-Ordners in eines der in angegebenen include_path
-Verzeichnisse kopieren Ihre PHP-Konfiguration und laden Sie jede Klassendatei manuell:
<?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 ' ;
Wenn Sie die SMTP
-Klasse nicht explizit verwenden (wahrscheinlich nicht), benötigen Sie keine use
Zeile für die SMTP-Klasse. Auch wenn Sie keine Ausnahmen verwenden, müssen Sie die Exception
-Klasse trotzdem laden, da sie intern verwendet wird.
PHPMailer 5.2 (kompatibel mit PHP 5.0 – 7.0) wird nicht mehr unterstützt, auch nicht für Sicherheitsupdates. Sie finden die neueste Version von 5.2 im Zweig 5.2-stable. Wenn Sie PHP 5.5 oder höher verwenden (was der Fall sein sollte), wechseln Sie zu den 6.x-Versionen.
Die größten Änderungen bestehen darin, dass sich Quelldateien jetzt im Ordner src/
befinden und PHPMailer jetzt den Namespace PHPMailerPHPMailer
deklariert. Dies hat mehrere wichtige Auswirkungen – lesen Sie die Upgrade-Anleitung für weitere Details.
Während die Installation des gesamten Pakets manuell oder mit Composer einfach, bequem und zuverlässig ist, möchten Sie möglicherweise nur wichtige Dateien in Ihr Projekt einbeziehen. Zumindest benötigen Sie src/PHPMailer.php. Wenn Sie SMTP verwenden, benötigen Sie src/SMTP.php, und wenn Sie POP vor SMTP verwenden ( sehr unwahrscheinlich!), benötigen Sie src/POP3.php. Sie können den Sprachordner überspringen, wenn Sie den Benutzern keine Fehler anzeigen und sich mit nur englischen Fehlern begnügen. Wenn Sie XOAUTH2 verwenden, benötigen Sie src/OAuth.php sowie die Composer-Abhängigkeiten für die Dienste, bei denen Sie sich authentifizieren möchten. Es ist wirklich viel einfacher, Composer zu verwenden!
<?php
//Import PHPMailer classes into the global namespace
//These must be at the top of your script, not inside a function
use PHPMailer PHPMailer PHPMailer ;
use PHPMailer PHPMailer SMTP ;
use PHPMailer PHPMailer Exception ;
//Load Composer's autoloader
require ' vendor/autoload.php ' ;
//Create an instance; passing `true` enables exceptions
$ mail = new PHPMailer ( true );
try {
//Server settings
$ mail -> SMTPDebug = SMTP :: DEBUG_SERVER ; //Enable verbose debug output
$ mail -> isSMTP (); //Send using SMTP
$ mail -> Host = ' smtp.example.com ' ; //Set the SMTP server to send through
$ mail -> SMTPAuth = true ; //Enable SMTP authentication
$ mail -> Username = ' [email protected] ' ; //SMTP username
$ mail -> Password = ' secret ' ; //SMTP password
$ mail -> SMTPSecure = PHPMailer:: ENCRYPTION_SMTPS ; //Enable implicit TLS encryption
$ mail -> Port = 465 ; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`
//Recipients
$ mail -> setFrom ( ' [email protected] ' , ' Mailer ' );
$ mail -> addAddress ( ' [email protected] ' , ' Joe User ' ); //Add a recipient
$ mail -> addAddress ( ' [email protected] ' ); //Name is optional
$ mail -> addReplyTo ( ' [email protected] ' , ' Information ' );
$ mail -> addCC ( ' [email protected] ' );
$ mail -> addBCC ( ' [email protected] ' );
//Attachments
$ mail -> addAttachment ( ' /var/tmp/file.tar.gz ' ); //Add attachments
$ mail -> addAttachment ( ' /tmp/image.jpg ' , ' new.jpg ' ); //Optional name
//Content
$ mail -> isHTML ( true ); //Set email format to HTML
$ mail -> Subject = ' Here is the subject ' ;
$ mail -> Body = ' This is the HTML message body <b>in bold!</b> ' ;
$ mail -> AltBody = ' This is the body in plain text for non-HTML mail clients ' ;
$ mail -> send ();
echo ' Message has been sent ' ;
} catch ( Exception $ e ) {
echo " Message could not be sent. Mailer Error: { $ mail -> ErrorInfo }" ;
}
Im Beispielordner finden Sie viel zum Spielen. Er deckt viele gängige Szenarien ab, darunter das Senden über Gmail, das Erstellen von Kontaktformularen, das Senden an Mailinglisten und mehr.
Wenn Sie die Instanz wiederverwenden (z. B. beim Senden an eine Mailingliste), müssen Sie möglicherweise die Empfängerliste löschen, um das Senden doppelter Nachrichten zu vermeiden. Weitere Hinweise finden Sie im Beispiel einer Mailingliste.
Das ist es. Sie sollten jetzt bereit sein, PHPMailer zu verwenden!
PHPMailer ist standardmäßig auf Englisch eingestellt, aber im Sprachordner finden Sie viele Übersetzungen für PHPMailer-Fehlermeldungen, auf die Sie möglicherweise stoßen. Ihre Dateinamen enthalten ISO 639-1-Sprachcode für die Übersetzungen, zum Beispiel fr
für Französisch. Um eine Sprache anzugeben, müssen Sie PHPMailer wie folgt mitteilen, welche Sprache verwendet werden soll:
//To load the French version
$ mail -> setLanguage ( ' fr ' , ' /optional/path/to/language/directory/ ' );
Wir freuen uns über Korrekturen und neue Sprachen – wenn Sie nach Korrekturen suchen, führen Sie das Skript Language/TranslationCompletenessTest.php im Testordner aus und es zeigt alle fehlenden Übersetzungen an.
Beginnen Sie mit dem Lesen im GitHub-Wiki. Wenn Sie Probleme haben, lesen Sie die Anleitung zur Fehlerbehebung, da diese regelmäßig aktualisiert wird.
Beispiele für die Verwendung von PHPMailer für gängige Szenarien finden Sie im Beispielordner. Wenn Sie nach einem guten Ausgangspunkt suchen, empfehlen wir Ihnen, mit dem Gmail-Beispiel zu beginnen.
Um den bereitgestellten Code-Footprint von PHPMailer zu reduzieren, sind Beispiele nicht enthalten, wenn Sie PHPMailer über Composer oder über den Zip-Datei-Download von GitHub laden. Sie müssen also entweder das Git-Repository klonen oder die obigen Links verwenden, um direkt zu den Beispielen zu gelangen.
Die vollständige generierte API-Dokumentation ist online verfügbar.
Sie können eine vollständige Dokumentation auf API-Ebene generieren, indem Sie phpdoc
im Ordner der obersten Ebene ausführen. Die Dokumentation wird im Ordner docs
angezeigt, allerdings muss PHPDocumentor installiert sein. Möglicherweise sind die Unit-Tests eine gute Referenz für die Durchführung verschiedener Vorgänge wie z. B. Verschlüsselung.
Wenn die Dokumentation nicht das abdeckt, was Sie brauchen, durchsuchen Sie die vielen Fragen auf Stack Overflow und lesen Sie die Anleitung zur Fehlerbehebung, bevor Sie eine Frage zu „SMTP-Fehler: Verbindung zum SMTP-Host konnte nicht hergestellt werden“ stellen.
PHPMailer-Tests verwenden PHPUnit 9 mit einer Polyfüllung, um Tests im 9-Stil auf älteren PHPUnit- und PHP-Versionen ausführen zu können.
Wenn dies nicht der Fall ist, können Sie etwas tun, um zu helfen?
Bitte legen Sie alle gefundenen Schwachstellen verantwortungsvoll offen – melden Sie Sicherheitsprobleme privat den Betreuern.
Weitere Informationen finden Sie in den Sicherheitshinweisen von SECURITY und PHPMailer auf GitHub.
Bitte senden Sie Fehlerberichte, Vorschläge und Pull-Requests an den GitHub-Issue-Tracker.
Unser besonderes Interesse gilt der Behebung von Grenzfällen, der Erweiterung der Testabdeckung und der Aktualisierung von Übersetzungen.
Wenn Sie einen Fehler in den Dokumenten gefunden haben oder etwas hinzufügen möchten, ändern Sie das Wiki – jeder kann es bearbeiten.
Wenn Sie Git-Klone aus der Zeit vor dem Wechsel zur PHPMailer-GitHub-Organisation haben, müssen Sie alle Remote-URLs, die auf den alten GitHub-Speicherort verweisen, mit einem Befehl wie dem folgenden in Ihrem Klon aktualisieren:
git remote set-url upstream https://github.com/PHPMailer/PHPMailer.git
Bitte verwenden Sie die Projekte SourceForge oder Google Code nicht mehr. Sie sind veraltet und werden nicht mehr gepflegt.
Entwicklungszeit und Ressourcen für PHPMailer werden von Smartmessages.net bereitgestellt, dem weltweit einzigen E-Mail-Marketingsystem, bei dem der Datenschutz an erster Stelle steht.
Spenden sind herzlich willkommen, sei es in Form von Bier, T-Shirts oder Bargeld. Sponsoring über GitHub ist eine einfache und bequeme Möglichkeit, den Betreuern und Mitwirkenden von PHPMailer „Danke“ zu sagen – klicken Sie einfach auf die Schaltfläche „Sponsor“ auf der Projektseite. Wenn Ihr Unternehmen PHPMailer verwendet, sollten Sie über die Teilnahme am Unternehmensunterstützungsprogramm von Tidelift nachdenken.
Verfügbar als Teil des Tidelift-Abonnements.
Die Betreuer von PHPMailer und Tausenden anderer Pakete arbeiten mit Tidelift zusammen, um kommerziellen Support und Wartung für die Open-Source-Pakete bereitzustellen, die Sie zum Erstellen Ihrer Anwendungen verwenden. Sparen Sie Zeit, reduzieren Sie Risiken und verbessern Sie den Zustand des Codes, während Sie gleichzeitig die Betreuer genau der Pakete bezahlen, die Sie verwenden. Erfahren Sie mehr.
Siehe Changelog.
coolbru
on SF) und Andy Prevost ( codeworxtech
) übernahmen das Projekt im Jahr 2004.