rob: Multipart Emails mit Html UND Text verschicken

Beitrag lesen

Hi!

Nein.
Da steht, dass es mit PHP möglich ist Emails im Text- _oder_ HTML-Format zu schicken.

Dann hast du nicht richtig gelesen.
Man kann mit PHP natürlich jede Art von Email verschicken. Zum einen kann man die mail()-Funktion einsetzen oder natürlich direkt auf einen installierten MTA (wie sendmail oder postfix) zugreifen und die Mail da abliefern.
Aber wie auch immer: Die Mailfunktion hat selbst nichts mit dem Inhalt der Mail zu tun. Deswegen gibt es da auch keinen Parameter zum Verschicken von Text oder HTML. Man kann HTML, Text, multipart oder Mails mit Base64-codierten Anhängen verschicken.
Man übergibt im Header einfach einen Content-Type und bastelt dann den Mailbody zusammen.
Wenn man keine Ahnung hat, wie die Mail aussehen sollte, dann kann man sich auch einfach mal ein Beispiel anschauen. Jeder bekommt wohl Spammails. Viele von denen werden im multipart-Format verschickt.
Man nimmt sich einfach so eine Mail und speichert sie als Textdatei ab. Da sieht man dann alles. Darüberhinaus bietet auch jeder brauchbare Mailclient (sogar Outlook - obwohl das ja nicht zu den brauchbaren Programmen zählt) die Möglichkeit, sich die Header bzw. den gesamten Quelltext der Mail anzusehen. Da sieht man dann die Header und den Mailbody.

OK. Ich hole jetzt mal ein wenig aus, um das Ganze mit den Multipart-Mails zu erklären:

Im Prinzip gibt es reine Textmails und HTML-Mails. Was hier verschickt werden soll, das sind multipart-Mails. Die enthalten einen HTML-Teil und einen Textteil.
Der Mailclient des Users entscheidet dann, welcher Teil der Mail dann im Endeffekt angezeigt werden soll. Akzeptiert der Client HTML-Mails, dann wird der HTML-Teil gezeigt und sonst halt nur der reine Textteil.
Damit wird der Nachteil des Ganzen dann auch schon sichtbar. Während eine HTML-Mail schon sinnlos durch die Tags aufgebläht wird, sind Multipart-Mails natürlich noch verschwenderischer, weil die Mail ja da im Prinzip zweimal enthalten ist.

HTML-Mails verschickt man, indem man den Content-Type auf text/html setzt. Bei reinen Textmails wird dieser auf text/plain gesetzt.

Bei einer Multipart-Mail gibt man als erstes mal den Content-Type an - wie bei einer Text- oder HTML-Mail auch.
Hier lautet der aber multipart/mixed.

$headers .= "Content-Type: multipart/mixed; boundary = $boundary\r\n\r\n";

$boundary enthält dann den Trenner, der die einzelnen Teile von einander trennt.
Den kannst du z.B. so erstellen:
$boundary = uniqid( "MULTIPARTDEMO" );

Dann folgt der erste Teil, z.B. so:
$body = "--$boundary\r\n" .
   "Content-Type: text/plain; charset=ISO-8859-1\r\n" .

Dann kommt der Textteil und danach wird dann auf die gleiche Art und Weise der HTML-Teil angehängt (Content-Type: text/html).

Im Übrigen hast Du dir im PHP-Handbuch bei der mail-Funktion nicht alles durchgelesen...
Wenn man hier http://php3.de/manual/de/ref.mail.php unter der Funktionsbeschreibung ein wenig runterscrollt, dann findet man da in den Kommentaren auch ein Beispiel für Multipart-Mails.

Wieso schickst du die Mails nicht im Textformat? Das kann jeder lesen und jeder ist damit zufrieden.

Tja, kann man natürlich machen... Wäre auch mein favorisiertes Format. Aber wenn er nunmal die Mails so verschicken will, dann soll er auch eine Antwort bekommen, wie er das macht...
Und obwohl ich selbst sowas auch nicht mag, verschicke ich auch desöfteren HTML-Mails. Was soll man denn auch sonst machen, wenn ein Kunde das wünscht?

Schöner Gruß,
rob