Programmierer habens oft eilig. Und sie gehen den Weg des geringsten Widerstands, was einfach geht, wird auch einfach gemacht. Bekanntes Beispiel: das Versenden von E-Mails aus der Applikation heraus, z.B. für Bestätigungsmails, Formularmailer usw.; in nahezu jeder Sprache gibt es dafür einfache Klassen oder Befehle, die eine E-Mail erzeugen und versenden.
Leider wird dabei häufig vergessen, den Zeichensatz der generierten Mail richtig (bzw. überhaupt) zu setzen. Hat eine Mail im Header kein Feld „Content-Type:“ gesetzt, so handelt man sich zwei gravierende Probleme ein:
- Der empfangende Client kann die Mail nicht richtig interpretieren, da er nicht weiß, in welcher Codierung der Inhalt der Mail ist. Das hat zur Folge, dass Umlaute, Sonderzeichen usw. nicht richtig angezeigt werden.
- viele Spam-Filter werten dies als Negativ-Punkt, somit steigt die Wahrscheinlichkeit, dass die Mail ihren Empfänger nicht erreicht.
Ich schreibe hier mal beispielhaft für PHP, Java, Spring und SEAM, wie man den Header um die Content-Type Angabe ergänzen kann. Dabei beschränke ich mich der Einfachheit halber auf eine simple Textmail, also kein Multipart mit HTML oder Attachment (Beispiele dazu lassen sich schnell im Web finden).
PHP:
$header = 'MIME-Version: 1.0' . "\n" . 'Content-type: text/plain; charset=UTF-8' . "\n" . $strFrom;
mail($strEmpfaenger, $strSubject, $strMailtext, $header) or die("Die Mail konnte nicht versendet werden."); |
$header = 'MIME-Version: 1.0' . "\n" . 'Content-type: text/plain; charset=UTF-8' . "\n" . $strFrom;
mail($strEmpfaenger, $strSubject, $strMailtext, $header) or die("Die Mail konnte nicht versendet werden.");
Java:
MimeMessage message = new MimeMessage(session);
message.setHeader("Content-Type", "text/plain" + "; charset=" + "UTF-8"); |
MimeMessage message = new MimeMessage(session);
message.setHeader("Content-Type", "text/plain" + "; charset=" + "UTF-8");
Spring:
MimeMessage mimeMessage = ...
MimeMessageHelper message = new MimeMessageHelper(mimeMessage, "UTF-8"); |
MimeMessage mimeMessage = ...
MimeMessageHelper message = new MimeMessageHelper(mimeMessage, "UTF-8");
SEAM: (ein Facelet-Template, das vom SEAM gerendert wird)
Die Beispiele sind bewusst kurz gehalten, das Thema E-Mail-Programmierung kann wohl Bücher füllen. In erster Linie will ich Entwickler motivieren, bei aller Eile auch an die Kleinigkeiten zu denken.