Via PHP generierte HTML-Email auf Android-Geräten und Co.

leicht-debil

Neu angemeldet
Registriert
13 Aug. 2013
Beiträge
57
Ort
Kassel
Hallo Community!

Ich bin entsetzt.
Erst jetzt merke ich, dass es offensichtlich nicht bzw. nur erschwert möglich ist, HTML-Emails via PHP zu generieren, die auf Android-Geräten und bei manchen E-Mail-Providern (z.B. GMX) vernünftig dargestellt werden.
Ich lasse eine Email generieren, die einen Aktivierungslink enthält.

Vereinfachtes Beispiel zur Verdeutlichung:

[src=php]<?php
foobar = md5( rand(100,999) . (time());
$foolink = 'http://www.confirm-domain.xy/confirm/' . $foobar;
$mail_header = 'MIME-Version: 1.0' . "\r\n";
$mail_header .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
$mail_header .= 'From: Max Mustermann<max@mustermann.xy>' . "\r\n";
// Meine Mail
$inhalt = '<!DOCTYPE html><html><head><meta charset="utf-8" /></head><body>';
$inhalt .= 'Klick für Aktivierung: <a href="' . $foolink . '">' . $foolink . '</a>';
$inhalt .= '</body></html>';
$betreff = 'Bestätige Deine Mailadresse';
mail($empfaenger,$betreff,$inhalt,$mail_header);
?>
[/src]

In Thunderbird, Outlook und bei Google-Mail funktioniert es, bei GMX z.B. nicht (andere Dienste konnte ich bislang nicht testen).
Ganz katastrophal sieht es hingegen bei meinem Android Smartphone aus (Huawai, Android 4.x, Standard-Mail-Anwendung). Hier wird alles falsch dargestellt und angegeben, was falsch dargestellt werden kann. Konkret:

  • Umlaute werden nicht UTF-8 kodiert
  • HTML-Tags werden einfach als Text angezeigt
  • Das Absendedatum wird auf den 01.01.1970 gesetzt, was bedeutet, dass die Mails unter allen anderen Mails angezeigt werden, da sie vermeidlich uralt sind

Habe zwar inzwischen gelesen, dass man bei Android-Geräten die Größe der zu empfangenden Mails auf "max" setzen muss - das ganze kann natürlich keine Lösung sein. Ich kann dem User nicht mitteilten, dass er die Einstellungen seinen Handys ändern soll, und von GMX zu Gmail wechseln soll ;-)

Ich weiß, dass HTML-Mails immer heikel sind und reine Textmails zu bevorzugen sind. Aber - und da machen wir uns nichts vor - HTML-Mails wirken (wenn sie dann mal korrekt dargestellt werden) eleganter.
Gibt es hier eine elegante Möglichkeit, die möglichst Viele Geräte, Dienste und Szenarien abdeckt?
 
Nein. Das ist ein riesiger Aufwand. Wir machen das ständig und es ist de facto unmöglich alle E-Mail Clients abzudecken. Du kannst ein paar Dinge machen, um bessere Erfolge zu bekommen z. B. Tabellen und so alte CSS-Standards nutzen wie es nur geht.
 
  • Thread Starter Thread Starter
  • #3
Das ist schon klar, dass es keine All-In-One-Lösung gibt.
Das Merkwürdige ist, dass via Thunderbird verfasste HTML-Mails auf meinem Smartphone korrekt und in HTML angezeigt werden, die via PHP generierten nicht. Also muss es doch am Coding liegen.
 
Das Problem ist wohl zumindest unter anderem, dass deine E-Mail keine gültige MIME-E-Mail ist. Insbesondere sind auch bei MIME-E-Mails die Header (u.a. der Subject-Header, den PHPs mail() aus dem angegebenen Betreff erzeugt) auf 7-Bit-ASCII-Zeichen beschränkt, Sonderzeichen müssen entsprechend QP-codiert werden. Auch musst du berücksichtigen, dass u.U. kein 8-Bit-Transfer-Encoding zur Verfügung steht, so dass du auch den Body entsprechend codieren musst. Zumindest müsstest du das 8-Bit-Transfer-Encoding aber mittels eines entsprechenden Headers ausweisen. Auch eine alternative Plain-Text-Version für E-Mail-Clients ohne oder mit deaktivierter HTML-Unterstützung wäre sehr sinnvoll.

Da es keineswegs trivial ist, gültige MIME-E-Mails zu erzeugen, würde ich stark zur Verwendung einer E-Mail-Bibliothek wie z.B. Swift Mailer raten. Damit kannst du sehr leicht gültige Multipart-E-Mails mit Text- und HTML-Alternativinhalten erzeugen; siehe etwa und .
 
Kugelfisch, woher nimmst du die ganzen Bibliotheken und Frameworks immer? :D
 
Swift Mailer gehört zu den Bibliotheken, die ich für diverse eigene Projekte einsetze. Speziell bei deutschsprachigen Projekten muss man in der Regel davon ausgehen, dass auch Umlaute in den E-Mail-Headern oder -Bodies enthalten sein werden; deshalb müssen MIME-E-Mails erzeugt werden. Da das alles andere als trivial ist und man sehr leicht Fehler machen kann, welche nicht sofort auffallen, aber zu zurückgewiesenen E-Mails, Spam-Scoring oder fehlerhafter Darstellung in bestimmten E-Mail-Clients führen, setze auch ich dazu eine fertige Bibliothek ein, welche das in der Vergangenheit sehr gut geleistet hat.
 
Hatte das gleiche Problem.

Du solltest mal: [src=php]$mail_header = 'MIME-Version: 1.0' . "\r";
$mail_header .= 'Content-type: text/html; charset=UTF-8' . "\r";
$mail_header .= 'From: Max Mustermann<max@mustermann.xy>' . "\r";[/src]
versuchen. Der Android Client erkennt nach 2 Zeilenumbrüchen den Header nicht mehr. Auch GMX spielt jetzt mit, aber nur mit css2 :'(
 
Zuletzt bearbeitet:
Zurück
Oben