Da große Unternehmen wie die deutsche Bahn es nicht hinbekommen, ihre HTML-Mails korrekt zu bauen, möchte ich an dieser Stelle einmal so freundlich sein, und einen Trick verraten: Man kann CSS in HTML-Mails einbinden!
Nein?
Doch!
OHHH!
Geht sogar ganz einfach.
Ich mach mal ein Beispiel:
From: foo <foo@example.org>
To: bar <bar@example.org>
Subject: Example
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: multipart/related; boundary="=_abcdefghijklmnopqrstuvwxyz000"
Your mail user agent does not support MIME mails.
--=_abcdefghijklmnopqrstuvwxyz000
Content-Type: multipart/alternative; boundary="=_abcdefghijklmnopqrstuvwxyz001"
--=_abcdefghijklmnopqrstuvwxyz001
Content-Disposition: inline
Content-Type: text/plain; charset="utf-8"
Content-Location: textmail.txt
Dies ist eine Text-Email.
--=_abcdefghijklmnopqrstuvwxyz001
Content-Type: text/html; charset="utf-8"
Content-Disposition: inline
Content-Location: htmlmail.htm
<html>
<head>
<title>Example Mail</title>
<link rel="stylesheet" href="cid:style" type="text/css">
</head>
<body>
<h1>Test!</h1>
<p>Dies ist eine HTML-Email.</p>
</body>
</html>
--=_abcdefghijklmnopqrstuvwxyz001--
--=_abcdefghijklmnopqrstuvwxyz000
Content-Type: text/plain; charset="utf-8"
Content-Disposition: attachment; filename="Anhang.txt"
Content-Length: 5
Hallo
--=_abcdefghijklmnopqrstuvwxyz000
Content-Type: text/css; charset="utf-8"
Content-Disposition: inline; filename="style.css"
Content-ID: <style>
Content-Location: style.css
body { font-size: 23pt; }
h1 { color: #00ff00; }
p { color: #FF0000; }
--=_abcdefghijklmnopqrstuvwxyz000--
Diese Mail beinhaltet eine Liste von multipart/related-Dokumenten (dem Mail-Text als Klartext und HTML-Fassung), einem Attachment, sowie einem Stylesheet. Der Anhang selber ist ganz Standardmäßig eingebunden und somit langweilig. Spannender ist das Stylesheet. Man setze die Content-Disposition auf inline, um es als Teil des Anzeige-Dokuments zu kennzeichnen und vergebe mit Content-Id einen eindeutigen Namen (hier: style) Nun ist alles, was man im HTML-Dokument tun muss, dieses Stylesheet wie vom Internet gewohnt, mit einer Link-Direktive einzubinden. Als URI für den href-Parameter dient hierbei die URI cid:style … die auch NUR REIN ZUFÄLLIG(tm) unserer gerade eben gesetzten Content-Id entspricht. Der Rest ist Geschmackssache.
Vielleicht nicht ganz: Wenn man nämlich versucht, den Text-Anteil der Mail (also textmail.txt) naiv aus dem HTML-Teil zu generieren, gehen zumeist Dinge kaputt, weil man wie die Bahn den Inhalt irgendwelcher HTML-Tags unbeabsichtigt mit ausgibt. Besser ist es in diesem Fall, für die Text-Fassung einfach ein in bspw. Markdown oder reStructuredText formatiertes Template zu verwenden. Das sieht dann nämlich sogar ohne Stylesheet richtig ordentlich aus und hat im Gegensatz zu den Versuchen der Bahn das CSS in der Textfassung mitzusenden sogar Style. 😛