Programmierung

Aufbereitung von HTML-Mails

In der Version 5.5.10 wurde der Befehl zur E-Mail-Aufbereitung um 4 Funktionalitäten erweitert.

Folgende Möglichkeiten wurden hinzugefügt, die in diesem Artikel besprochen werden:

  • Verwendung des UTF-8-Zeichensatzes
  • E-Mail-Body aus externer Datei
  • Versenden von PNG-Grafiken
  • Eingebettete Objekte in HTML-Mails

In der heutigen Zeit wird es immer wichtiger seine "Corporate Identity" auch im Schriftverkehr per E-Mail auszudrücken. Dies ist am besten per HTML-Mail möglich. Um eine HTML-Mail mit CONZEPT 16 zu erstellen, gibt es mehrere Möglichkeiten. Zum einen ist es möglich die E-Mail zeilenweise zu generieren, aber auch einen vordefinierten Textpuffer zu verwenden. Weiterhin besteht nun die Möglichkeit eine externe Datei direkt als Mail-Body zu verwenden. Bei der Mail-Aufbereitung ist zu beachten, dass immer ein ASCII-Text vor dem HTML-Teil hinzugefügt werden sollte, damit auch textbasierte E-Mail-Programme die E-Mail anzeigen können. Die E-Mail-Anhänge sollten zum Schluss der E-Mail folgen. Wird die Reihenfolge nicht eingehalten, kann es auch zu fehlerhaften Darstellungen der E-Mail kommen.

Verwendung des UTF-8-Zeichensatzes

Seit der 5.5.10 kann man UTF-8-Zeichenketten in E-Mails verwenden. Dazu gibt man die zusätzliche Option _MimeCS_UTF8 im Parameter int1 an. Diese Möglichkeit bietet den Vorteil auch E-Mails zu versenden, die Zeichen enthalten, welche nicht im Zeichensatz Latin-1 enthalten sind.

E-Mail-Body als externe Datei

Bisher war es mit dem Befehl MailData() möglich den Text zeilenweise zu generieren oder aus einem Textpuffer zu laden. Für den HTML-Text konnte jedoch nicht direkt der Textpuffer verwendet werden. Dieser musste Zeile für Zeile ausgelesen und in die E-Mail eingefügt werden.

Nun ist es einerseit möglich auch den HTML-Text per Textpuffer zu übergeben und andererseits auch direkt extern vorliegende E-Mail-Bodys zu verwenden.

Die Möglichkeit, eine externe Datei für den ASCII- oder HTML-Text zu verwenden ist nicht mit der zeilenweisen Generierung und dem Einfügen eines Textpuffers kombinierbar. Das heißt, der komplette Body der E-Mail muss in der externen Datei vorliegen.

Wird der Text, wie im Beispiel, in 8-Bit-Kodierung (Option _MimeTE_8B) zur Mail hinzugefügt, ist zu beachten, dass jeder Zeile nur 78 Zeichen enthalten sollte, da es sonst zu Datenverlusten kommen kann. Diese Limitation ist auch im RFC (Request for Comments) 2822 beschrieben.

// ASCII-Text
tMailHdl->MailData(_MailFile | _MimeTE_8B,
  'C:\mailbody_plain.txt');

// HTML-Text
tMailHdl->MailData(_MailFile | _MimeTE_8B | _MimeTextHtml,
  'C:\mailbody_html.html');
Versenden von PNG-Grafiken

Das Grafikformat PNG wird im Internet immer populärer, weil es gut komprimierbar ist. Gegenüber JPG-Dateien jat PNG weiterhin den Vorteil, dass Transparenz unterstützt wird. Um PNG-Bilder einfacher angeben zu können, wurde die Konstante _MimeImagePNG hinzugefügt. Die Anwendung der Konstante wird in dem Beispiel zu den eingebetteten Objekten gezeigt.

Eingebettete Objekte

Einige Objekte können in HTML-Mails direkt eingebettet werden. Diese erscheinen in der Regel im Mail-Client dann nicht als Anhang, sondern werden direkt in der E-Mail angezeigt. Die Möglichkeit Objekte in HTML-Mails einzubetten besteht in allen drei Formen der E-Mail-Aufbereitung.

Objekte lassen sich mit einer vollständigen URI, oder auch mit einem symbolischen Namen in eine HTML-Mail einbetten. Dabei ist es wichtig, dass bei dem Befehl MailData() der gleiche Name oder die gleiche URI als Objektreferenz (alpha4) angegeben wird, die auch im HTML-Code verwendet wird. Weiterhin muss als zusätzliche Option (int1), beim Hinzufügen der externen Datei, _MimeRelated angegeben werden. Bei der Verwendung von eingebetteten Objekten empfehlen wir die Dateien mit symbolischen Namen anzugeben, da somit die HTML-Seite inklusive der Bilder auch auf anderem Wege als per E-Mail weitergegeben werden können.

Bilder in E-Mails müssen nicht in die E-Mail eingebettet werden, wenn sie auf einem Webserver zur Verfügung stehen. Dies hat folgende Vorteile:

  • Das Speichervolumen der E-Mail ist erheblich geringer
  • Die E-Mail enthält keine Bilder, die von Spamfiltern blockiert werden könnten
  • Es ist über die Webzugriffe nachvollziehbar, wie oft die E-Mail gelesen wurde

Dem gegenüber hat das Einbetten von Bildern folgende Vorteile:

  • Die Bilder müssen nicht auf einem Webserver bereitgehalten werden
  • Die E-Mail kann auch ohne Internet-Verbindung vollständig angezeigt werden
  • Die E-Mail kann auch nach Jahren noch korrekt dargestellt werden

Im folgenden Beispiel wird das Einbetten von Objekten in eine E-Mail anhand von Bildern demonstriert. Beispielsweise sieht eine HTML-Datei folgendermaßen aus:

<html>
  <body>
    <img src="http://www.vectorsoft.de/mailheader.png">
    <br/><br/>
    Sehr geehrte Damen und Herren,<br/><br/>

    <!-- Mailtext ... -->

    Mit freundlichen Gr&uuml;&szlig;en<br/>
    vectorsoft AG<br/>
    <img src="mailfooter.bmp">
  </body>
</html>

Dann könnten der E-Mail-Body und die Bilder mit folgenden Befehlen an die E-Mail angehängt werden:

tMailHdl->MailData(_MailFile | _MimeTextHtml | _MimeTE_8B,
  'C:\mailbody.html');

tMailHdl->MailData(_MailFile | _MimeImagePNG | _MimeTE_B64 |
  _MimeRelated, 'C:\mailheader.png', '',
  'http://www.vectorsoft.de/mailheader.png');

tMailHdl->MailData(_MailFile | _MimeOtherB64 | _MimeRelated,
  'C:\mailfooter.bmp', 'image/bmp', 'mailfooter.bmp');

Das Beispiel zeigt weiterhin, dass auch Objekte verwendet werden können, für die es keine _MimeImage– oder _MimeApp-Konstante gibt. Dazu wird eine _MimeOther-Konstante verwendet und der Mime-Typ der Datei im dritten Parameter angegeben.

Download

Ressourcen Mail.zip (8.84 KB)
Sie müssen angemeldet sein, um die Datei herunterladen zu können.

3 Kommentare

3 Kommentare “Aufbereitung von HTML-Mails”

  1. Hallo George,

    eine Funktion auf die wir schon lange warten.
    Jetzt fehlt nur noch eine interne Konvertierung von RTF-Texten in HTML. Die Funktion in der CodeLibrary.ca1 ist dafür nicht verwendbar, da nur wenige Funktionen von RTF-Texten unterstützt werden.

    Gruß M. Becker

  2. Hallo George,

    diese Möglichkeit besteht zur Zeit nicht. Das binäre Objekt muss exportiert werden und kann dann an die E-Mail mit _MailFile angehangen werden.

    Gerne nehmen wir diesen Punkt als Vorschlag auf.

    Gruß Daniel

Kommentar abgeben