Hallo Perterle,
ist es möglich, in einem Mail sowohl eine Variante für die, die HTML Ansicht aktiviert haben, als auch eine Variante für die, die HTML abgeschaltet haben oder deren Mailer HTML gar nicht beherrscht?
Wenn ja, wie deklariere ich das im Header und wie unterscheide ich beide Varianten?
Das wird jetzt ein ziemlich trockener Monolog über die einzelnen Bestandteile an etablierten Standards die dort alle hinein fließen. So hast Du aber die Möglichkeit zu sehen, wie man an solche Probleme herangehen kann:
Du willst eine Mail versenden. Dafür ist nunmehr die RFC 5322 maßgeblich. Dort werden alle Grundlegenden Parameter festgelegt. Im wesentlichen ist erstmal Abschnitt 3.6 interessant. Ihm sind Header Sender und Empfänger zu entnehmen, die in Mails erlaubt sind. (Zum Verständnis: Im Gegensatz zu HTML und HTTP enthalten Mails nicht für die Nachrichtenanzeige bestimmte Header, die mit dem übertragendem Protokoll SMTP nichts zu tun haben, auch wenn sie durch die Übertragung via SMTP bedingt sind.) Ich füge dies, auch wenn es mit Deinem eigentlichem Problem nichts zu tun hat, deswegen an, weil es immer wieder Probleme damit gibt. Kommt es bei der Thematik -Mail mit PHP- zu Problemen, sollte in der RFC 5322 zuerst der prüfende Blick fallen. Wichtigster Punkt, der aber erwähnt werden muss: Alle Header wie leider auch so alle Werte müssen im Zeichensatz ASCII kodiert sein. Das folgt aus Abschnitt 3.2.3.
Nächstes Thema (hat immer noch nichts mit Deinem Problem zu tun, sorgt aber genauso gerne für Fehler und ist schier ewiger Quell vieler Fragen hier im Forum) sind also Zeichensätze. Manche Werte von Mail-Header haben einfach einen Umlaut wie "ä". Will man also eine Überschrift codieren, sollte man sich RFC 2231 durcharbeiten.
67 Seiten Spezifikationen später nähern wir uns Deinem Problem. Mails lassen sich unterteilen. Auch dafür gibt es selbstverfreilich Standards. Der Plural verheißt - frohe Kunde - es wird viel.
- RFC 2045 Formatierung von Inhalten
- RFC 2046 Typenkatalog von Inhalten
Ich fange mal von hinten an, weil es meiner Ansicht nach verständlicher ist. Sicher hast Du schon mal mit der PHP-Funktion header() auch einen Content-Type ausgegeben. Die Werte dieses HTTP-Header beruhen, genauso wie die für Mails auch, auf der RFC 2046. Jeder Mediatyp kann Teil einer Mail sein. Nun sind wir also bei Deiner Frage: Text (Mediatyp text/plain) und HTML (Mediatyp text/html bzw. application/xml+xhtml) sollen nun in einer Nachricht _alternativ_ angezeigt werden. Dem Mailprogramm wird dabei angegeben, dass es sich um unterschiedliche Nachrichtenteile handelt und es wird eine Teilgrenze zwischen den einzelnen Teilen definiert.
Als vereinfachtes, nicht produktiv zu verwendendes Verständnisbeispiel einer Mail:
#####################################################
Nachricht: alternative Anzeige
Teilgrenze: 123
--123
Typ: text/plain
Hallo Welt!
--123
Typ: text/html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<body>
<p>Hallo <strong>Welt!</strong></p>
</body>
</html>
#####################################################
Weiter in Teil 2.