php: Text-E-Mails schön formatieren
Wer zu versendene E-Mails seiner Onlineapplikation “schön” formatieren möchte, muss diese entweder als HTML anlegen und CSS einbinden, oder er / sie benutzt reine Text-E-Mails und liest diesen Beitrag.
Nehmen wir an, wir möchten all die Daten aus einem Formular mit php entgegennehmen, aufbereiten und als E-Mail versenden. Ganz einfach geht das, in dem man das Array $_POST durchgeht und den Schlüssel (den Namen des Formularfeldes) nebst seines Wertes (das, was der Benutzer ins Formularfeld eingetragen hat) Zeile für Zeile ausgibt.
Die Lesbarkeit könnten wir steigern, in dem wir eine HTML-E-Mail verwenden und die diversen Schlüssel und Werte in einer Tabelle auflisten. Da ich persönlich eine starke Abneigung gegen HTML-E-Mails habe, setze ich auf reine Text-E-Mails ohne Formatierung. Aber genau hier liegt der Hase begraben: Was kann ich denn tun, um die E-Mail leserlicher zu gestalten? Die Lösung heisst: automatisiert gesetzte Tabs!
Die Lösung
Folgendes php-Script liest das Array $_POST Zeile für Zeile aus, berechnet die Anzahl der Buchstaben des Schlüssels, setzt einen Doppelpunkt und so viele Tabulatoren (acht Leerzeichen hat hier im Beispiel ein Tab), wie nötig, damit die dahinter folgenden Werte in der gesamten E-Mail immer auf gleicher Höhe stehen.
$mailFrom = $_POST['Email'];
$subject = '[mySite] Anfrage vom '.date('d.m.Y (H:i').' Uhr)';
$tab = 8;
$tabLimit = 3;
$limitChars = ($tab * $tabLimit);
$message = '';
foreach($_POST AS $key => $value) {
$strlen = (strlen($key) + 1);
$whiteSpace = ($limitChars - $strlen);
$tabsNum = ($strlen == $tab) ? ($tabLimit - 2): floor($whiteSpace / $tab);
$tabs = str_repeat("\t", $tabsNum);
$message .= $key.":".$tabs.trim($value)."\n";
}
$message .= "\n-- \n"
. 'URL: '.$_SERVER['HTTP_HOST']."\n"
. 'IP: '.$_SERVER['REMOTE_ADDR']."\n"
. 'Host: '.gethostbyaddr($_SERVER['REMOTE_ADDR'])."\n"
. 'Agent: '.$_SERVER['HTTP_USER_AGENT']."\n";
Wenn ihr dieses Beispiel in eure Applikation übernehmen wollt, solltet ihr unbedingt die Eingaben der Benutzer validieren und eventuell sogar auf SPAM überprüfen. Viel Spaß beim ausprobieren!
1 Kirsch schrieb am 24. März 2008 (09:03 Uhr)
2 Ich schrieb am 24. März 2008 (11:03 Uhr)
3 Dominik schrieb am 24. März 2008 (16:03 Uhr)
4 macx schrieb am 24. März 2008 (16:03 Uhr)
5 Johannes schrieb am 26. März 2008 (16:03 Uhr)