21.02.2016, 23:00
Dieser Beitrag wurde zuletzt bearbeitet: 28.08.2019, 10:33 von Arne Drews.
Bearbeitungsgrund: MOD: Downloadlink aktualisiert
Hinweis
Die aktuelle Version des SwiftMailer ist im Standard nur noch als Installation über composer gedacht. Einige kennen meine Ansicht über den Zwang dieses Tool benutzen zu müssen. Das Tool ist gut für seinen Zweck, aber es ist eine Schande, dass Einsteiger/Anfänger gezwungen werden, sich diesem anzunehmen. Ein Produkt/PlugIn sollte aus meiner Sicht für jeden Anwender mit einfacher Anleitung installierbar sein ohne weitere Tools dafür einsetzen zu müssen!Wer keinen Composer installieren möchte oder kann, hat die Möglichkeit auf PHProcks! ein PreComposed Package herunterzuladen. Dieses Package ist mit Composer erstellt worden und kann direkt verwendet werden. Es ist kein Composer zur Nutzung notwendig.
Den Download findet ihr hier: SwiftMailer | PreComposed Package
Die Nutzung ist dann wieder wie unten unter Das Transport-Objekt beschrieben.
HTML E-Mail versenden mit dem SwiftMailer
Dieses Tutorial soll den SwiftMailer als Alternative zum PHPMailer kurz vorstellen. Eine Ausführung, warum man generell eine Mailer-Klasse verwenden sollte, findet ihr in diesem Tutorial, so dass wir an dieser Stelle nicht weiter darauf eingehen wollen.
Wie implementiere ich den SwiftMailer?
Um den SwiftMailer in euer Projekt einzubinden, müsst ihr die aktuelle Version notwendigen Pakete herunterladen und auf eurem Webspace hinterlegen. Wir gehen mal davon aus, dass ihr den Inhalt des Downloads in das Verzeichnis
swiftmailer/
abgelegt habt.Wie fange ich an?
Der SwiftMailer bietet uns verschiedene Klassen, die wir nicht immer auch alle benötigen. Daher ist es wichtig, daß wir den Autoloader vom SwiftMailer in unser Projekt einbinden:
PHP-Code:
include_once __DIR__ . '/swiftmailer/swift_required.php';
Grundsätzlich benötigen wir beim SwiftMailer drei Objekt-Instanzen:
Swift_MailTransport
Swift_SendmailTransport
Swift_SmtpTransport
Swift_Message
Swift_Mailer
Das Transport-Objekt
Mit dieser Objekt-Instanz definieren wir die Methode, wie wir die Mail versenden wollen. Wir können dies über die gewöhnliche
mail()
-Funktion von PHP machen, den MailerDeamon sendmail
nutzen oder die Mail direkt über SMTP
versenden. Für dieses Tutorial entscheiden wir uns grundsätzlich mal für die SMTP
-Variante, damit wir auch ein wenig konform zu dem PHPMailer-Tutorial bleiben.Wir instanziieren also ein Objekt der Klasse Swift_SmtpTransport und setzen die erforderlichen Auth-Parameter:
PHP-Code:
$oTransport = Swift_SmtpTransport::newInstance( 'mail.example.com', 587 );
$oTransport->setUsername( 'auth@example.com' );
$oTransport->setPassword( 'yourpassword' );
Hinweis
Solltet ihr die Daten nicht wissen, nutzt am besten dieSwift_MailTransport
-Klasse:PHP-Code:
$oTransport = Swift_MailTransport::newInstance();
Swift_SendmailTransport
-Klasse erfordert die Angabe des sendmail
-Pfades, sofern dieser vom Standard /usr/sbin/sendmail
abweicht.Das Message-Objekt
Als nächstes wollen wir uns ein Message-Objekt erstellen:
PHP-Code:
$oMessage = Swift_Message::newInstance();
PHP-Code:
$oMessage->setFrom( 'phprocks@example.com' );
$oMessage->setTo( 'max.mustermann@example.com', 'Max Mustermann' );
$oMessage->setCc( 'maria.mustermann@example.com', 'Maria Mustermann' );
$oMessage->setSubject( 'PHProcks! Tutorials - less time to learn more' );
Als nächstes wollen wir den Content, also den Mail Inhalt an das Objekt übergeben:
PHP-Code:
$oMessage->setBody( '<h1>PHProcks!</h1><h2>Tutorial: HTML E-Mail senden mit SwiftMailer</h2>', 'text/html' );
$oMessage->addPart( strip_tags($oMessage->getBody()), 'text/plain' );
Content-Type
es sich handelt.Hinweis
Die MethodeaddPart()
bietet uns auf einfache Weise die Möglichkeit, alternativen Content in die Mail zu setzen. Dies kann nützlich sein, wenn bspw. unsere Mail hauptsächlich per HTML angezeigt werden soll, aber der Empfänger die HTML-Ansicht deaktiviert hat. In diesem Fall würde der Teil, den wir mit addPart( [content], 'text/plain' )
an die Mail gehängt haben greifen. Der alternative PlainText-Part sollte im Idealfall eigenen Content besitzen. Die Funktion strip_tags()
wurde für dieses Tutorial nur der Einfachheit genutzt.Nu' aber: Versenden der Mail über das Mail-Objekt
Wir haben nun alle Vorbereitungen soweit abgeschlossen. Wir haben festgelegt, wie unsere Mail versendet werden soll und was unsere Mail eigentlich an Inhalt hat. Jetzt muss diese nur noch versendet werden.
Wir instanziieren ein Mail-Objekt und übergeben diesem direkt unser Transport-Objekt:
PHP-Code:
$oMailer = Swift_Mailer::newInstance( $oTransport );
send()
-Methode:PHP-Code:
if ( !$oMailer->send($oMessage) ) {
echo 'Something\'s went wrong!';
exit;
}
echo 'Yes! First Mail with SwiftMailer sent successfully!';
Das komplette Script zur Übersicht
Um einmal im Ganzen zu schauen, was wir gemacht haben, poste ich hier nochmal das gesamte Script aus diesem Tutorial:
PHP-Code:
// SwiftMailer Autoloader einbinden
include_once __DIR__ . '/swiftmailer/swift_required.php';
// Das Transport-Objekt
$oTransport = Swift_SmtpTransport::newInstance( 'mail.example.com', 587 );
$oTransport->setUsername( 'auth@example.com' );
$oTransport->setPassword( 'yourpassword' );
// Das Message-Objekt
$oMessage = Swift_Message::newInstance();
$oMessage->setFrom( 'phprocks@example.com' );
$oMessage->setTo( 'max.mustermann@example.com', 'Max Mustermann' );
$oMessage->setCc( 'maria.mustermann@example.com', 'Maria Mustermann' );
$oMessage->setSubject( 'PHProcks! Tutorials - less time to learn more' );
$oMessage->setBody( '<h1>PHProcks!</h1><h2>Tutorial: HTML E-Mail senden mit SwiftMailer</h2>', 'text/html' );
$oMessage->addPart( strip_tags($oMessage->getBody()), 'text/plain' );
// Das Mailer-Objekt
$oMailer = Swift_Mailer::newInstance( $oTransport );
// Versenden der Mail und prüfen, auf Versendet
if ( !$oMailer->send($oMessage) ) {
echo 'Something\'s went wrong!';
exit;
}
echo 'Yes! First Mail with SwiftMailer sent successfully!';