php: Text-E-Mails schön formatieren

24. März 2008 Bisher 5 Kommentare

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.

$mailTo        = 'your-email@adress.tld';
$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!

Kommentare

Einen eigenen Kommentar schreiben

  1. 1 Kirsch schrieb am 24. März 2008 (09:03 Uhr)

    Ich empfehle statt TABs doch lieber Leerzeichen zu verwenden, da nicht in jeder Anwendung die TABs gleich lang sind.
    Bei den meisten Anwendungen, die ich benutze, sind TABs 4 Leerzeichen lang, bei einigen wenigen sind es 8. Bei manchen Anwendungen kann man zwar die länge eines TABs einstellen, aber da wird ein Anwender nichts ändern, nur um eine Mail besser lesen zu können.

  2. 2 Ich schrieb am 24. März 2008 (11:03 Uhr)

    $message .= “\n— \n”;
    .= ‘URL: ‘.$_SERVER[‘HTTP_HOST’].”\n”

    soll wohl eher

    $message .= “\n— \n”
    . ‘URL: ‘.$_SERVER[‘HTTP_HOST’].”\n”

    heißen.

  3. 3 Dominik schrieb am 24. März 2008 (16:03 Uhr)

    Sehr nützlich, danke!

    LG
    Dominik

  4. 4 macx schrieb am 24. März 2008 (16:03 Uhr)

    @Kirsch
    Tabs sind immer lesbar, egal ob eine Anwendung zwei, vier oder acht Anschläge benutzt. Ich würde Tabs sogar noch bevorzugen, weil manche E-Mail-Programme selbst Rein-Text-Nachrichten mit einer Schrift nach Wahl darstellen. Und dann kannst du bei einer Arial rein gar nichts mehr lesen. Daher lieber Tabs.

    @Ich
    Bitte das nächste Mal mit deinen Namen. Das Beispiel habe ich geändert, danke.

  5. 5 Johannes schrieb am 26. März 2008 (16:03 Uhr)

    Sehr gut! Sowas kann man immer mal brauchen :)

Antwort schreiben

Kommentare neuer Teilnehmer werden auf Grund von hohem SPAM-Aufkommen zunächst von mir freigeschaltet, bis sie online erscheinen. Textile kann benutzt werden.

(wird nicht veröffentlicht)