Sonderzeichenprobleme in E-Mails

Die Java E-Mail API funktioniert wunderbar, allerdings ist sie etwas gewoehnungsbeduerftig. Die Bibliothek commonst-email von apache setzt auf der E-Mail API von Java auf, sie abstrahiert davon und ist ein Wrapper fuer die Java E-Mail API. Die commons-email.jar bietet eine benutzerfreundliche API an und ich habe bisher sehr gute Erfahrungen mit der Bibliothek gemacht.
Bei der Versendung von plain-text E-Mails kann es zu Problemen mit Sonderzeichen kommen. Die Bibliothek benutzt fuer die zu verschickenenden E-Mails immer das Standard-Charset des Rechners auf dem die Software ausgefuehrt wird. Bei Mac OS X ist das z.B. MacRoman. Das ist ein charset was auf Windows und Linux-Systemen standardmaessig nicht gibt. Die Zeichencodierung ist also immer Glueckssache. Deshalb ist es erforderlich das charset explizit zu setzen.

MultiPartEmail email = new MultiPartEmail();
email.setHostName(host);
email.setFrom(fromEmail, fromName);
email.addReplyTo(replyTo!=null?replyTo:fromEmail);
email.addTo(to);
email.setMsg(message)
email.setCharset(Email.ISO_8859_1);

In dem oberen Sourcecode wird das charset explizit gesetzt, trotzdem kommen die Sonderzeichen beim Empfaenger nicht korrekt an! Die Methode “setCharset()” setzt nur das charset fuer das “subject” Feld, nicht aber fuer den Content. Der nachfolgende Code zeigt wie das charset fuer beide Felder zu setzen ist, damit immer alle Sonderzeichen richtig beim Empfaenger ankommen.

MultiPartEmail email = new MultiPartEmail();
email.setHostName(host);
email.setFrom(fromEmail, fromName);
email.addReplyTo(replyTo!=null?replyTo:fromEmail);
email.addTo(to);
email.setCharset(Email.ISO_8859_1);
email.setContent(message, "text/plain; charset=iso-8859-1");

Zwei Tage nachdem ich diesen Bug in einer Applikation behoben habe, verlangte der Kunde das alle E-Mails als HTML-E-Mails verschickt werden sollen 🙂

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s