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 HTML E-Mails versenden mit dem SwiftMailer
#1
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!
Ich werde versuchen, die Pakete und Abhängigkeiten in den nächsten Tagen hier mal zusammenzustellen, um die Verwendung des SwiftMailer auch ohne composer zu vereinfachen.
Sollte das Vorhaben mit meinen Kenntnissen nicht möglich sein, werde ich hier einen entsprechenden Hinweis vermerken und den Favoriten-Status auf den PHPMailer schwenken, solange es dort noch möglich ist, composer-frei entwickeln zu dürfen.

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'
Damit haben wir den Grundstein gelegt, SwiftMailer in unserem Projekt nutzen zu können.

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' ); 
Damit wäre das auch schon erledigt. Für die korrekten Angaben des Mail-Servers müsst ihr euch bei eurem Provider informieren.
Hinweis
Solltet ihr die Daten nicht wissen, nutzt am besten die Swift_MailTransport-Klasse:
PHP-Code:
$oTransport Swift_MailTransport::newInstance(); 
Die Verwendung der 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(); 
Diesem Objekt teilen wir nun die Einzelheiten unseres Mail-Headers, sowie des Mail-Contents mit. Für den Mail-Header wollen wir uns auf die notwendigsten festlegen:
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' ); 
Wir haben jetzt den Absender, den Empfänger, einen Empfänger in Kopie und den Betreff an das Message-Objekt gebunden.
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->addPartstrip_tags($oMessage->getBody()), 'text/plain' ); 
Wie man erkennen kann, können wir dem Message-Objekt über den zweiten Parameter direkt mitteilen, um was für einen Content-Type es sich handelt.
Hinweis
Die Methode addPart() 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 ); 
Das Senden der Mail erfolgt über die 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->addPartstrip_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!'
Hinweis
Die Möglichkeiten des SwiftMailer sind natürlich noch sehr viel größer, als hier dargestellt. Da es sich hierbei aber um ein Einsteiger-Tutorial handeln soll, werde ich darauf nicht weiter eingehen.


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

Gehe zu: