Artikelformat

Schreib mal wieder

Diesen Slogan nutze die Post in meiner Jugend. Inzwischen werden statt Briefe eher Emails verschickt und das wollen wir jetzt auch mal mit PHP machen. Eine Mail mit PHP zu versenden ist grundsätzlich einfach. Man benutzt einfach die mail-Funktion. Diese ist aber nicht ganz so übersichtlich und es ist auch nicht so einfach eine schöne Email zusammenzubauen, die Anhänge und sowohl Html als auch Plain-Text enthält. Um diese Erstellung zu vereinfachen existieren einige Bibliotheken. Beispielhaft schauen wir uns Swiftmailer an.

Swiftmailer ist eine Bibliothek die objektorientiert entwickelt wurde. Die Hauptbestandteile sind eine Message, ein Transport und der Mailer. Man baut sich also eine Email zusammen, erstellt sich einen Transport und sendet die Email über den Transport. Der letzte Schritt wird vom Mailer übernommen. Das Erstellen einer Email funktioniert auf 2 mögliche Arten. Entweder herkömmlich durch den Aufruf diverser Setter, die auf einem Swift_Message Objekt arbeiten oder man nutzt das Fluent Interface und kann die Methoden verketten (Chaining).

1
2
3
4
5
6
7
8
9
10
11
12
// Message Objekt erzeugen
$message = Swift_Message::newInstance();
// Subjekt setzen
$message->setSubject("PM Test");
// Mail Text setzen (hier in Html)
$message->setBody("<i>Dies</i> ist ein <u>Test</u>","text/html");
// alternativen Mailtext hinzufuegen (hier Plaintext)
$message->addPart("Dies ist ein Test","text/plain");
// Absender setzen
$message->setFrom("[email protected]");
// Empfaenger setzen
$message->setTo("[email protected]");

Um einen Dateianhang hinzuzufügen bietet Swiftmailer die Swift_Attachment-Klasse an. Damit lassen sich Dateien und auch Daten aus einer Variable als Anhang in ein Swift_Message-Objekt integrieren. Wenn man das obige Beispiel in der Fluent Interface Variante nutzt sieht das dann so aus:

1
2
3
4
5
6
7
8
$message2 = Swift_Message::newInstance()
    ->setSubject("PM Test 2")
    ->setBody("<i>Dies</i> ist ein <u>Test</u>","text/html")
    ->addPart("Dies ist ein Test","text/plain")
    ->attach(
          Swift_Attachment::fromPath("run.php", "text/plain")->setFilename("test.php"))
    ->setFrom("[email protected]")
    ->setTo("[email protected]");

Die generierte Email kann man als String ausgeben. So hat man auch die Möglichkeit zu kontrollieren, ob die Mail das gewünschte Ergebnis liefern wird.

1
echo $message->toString();

Diese Mail soll nun auch noch verschickt werden. Hierfür benötigt man zuerst einen Transport. Beispielhaft ist hier der Swift_SmtpTransport vorgestellt. Interessant an dieser Sache ist, dass man den Transport bspw per Dependency Injection einbinden und somit sehr einfach wechseln kann – falls notwendig.

1
2
3
$transport = Swift_SmtpTransport::newInstance('smtphost', 25)
  ->setUsername('username')
  ->setPassword('password');

Jetzt muss man Transport und Message nur noch verbinden, um die Email auch zu versenden. Dies übernimmt die Swift_Mailer-Klasse. Der Mail-Versand kann dann mit einer einfachen Zeile realisiert werden.

1
$mailer = Swift_Mailer::newInstance($transport)->send($message);

Weitere Informationen findet man in der recht ordentlichen Doku des Swiftmailers.

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close