E-Mailadresse mit Umlauten

Seit dem Jahr 2003 stehen IDN-Domainsinternationalized domain name – zur Verfügung. Diese erlauben es, dass in Domain-Namen auch Umlaute (und andere Sonderzeichen) enthalten sind.

Damit können wir es nun auch mit E-Mail Adressen zu tun bekommen, in denen Umlaute enthalten sind und damit kann es beim Versand von Nachrichten an diese Adressen zu Problemen kommen.

Um diesen Problemen zu begegnen wurde das Kodierungsverfahren Punycode eingeführt. Dieses dient zum umkehrbaren und eindeutigen Umwandeln von Unicode-Zeichenketten in ASCII-kompatible Zeichenketten.

Der Domain-Name müller-reisen.de sieht in Punycode so aus: xn--mller-reisen-dlb.de

Für die Kodierung von IDN Domain-Namen in Punycode kommt mit Java die Klasse java.net.IDN daher.

Aufgefallen ist uns das Problem durch folgende Exception in der Protokollierung unserer Anwendungen:

javax.mail.SendFailedException: Invalid Addresses;
nested exception is: com.sun.mail.smtp.SMTPAddressFailedException:
501 5.1.3 Bad recipient address syntax

Die Lösung ist, die E-Mail Adressen der Empfänger entsprechend zu kodieren.

Wichtig ist es, nur den Domain-Namen der E-Mail Adresse zu kodieren und nicht die komplette E-Mail Adressen.

/**
* Kodiert den Domain-Namen einer E-Mail Adresse in Punycode
* 
* @param emailadr, zu kodierende E-Mail Adresse
* @return für Punycode kodierte E-Mail Adresse
*/
public String punycodeEMail(String emailadr) {
	// Kodierung ist nur dann notwendig, wenn in der Adresse ein Umlaut vorhanden ist
    String t = emailadr.toLowerCase();
    if(t.indexOf("ö") < 0 && t.indexOf("ä") < 0 && t.indexOf("ü") < 0) {
		return emailadr;
	}
	// Namen des Empfängers vom Domain-Namen trennen
	String[] parts = emailadr.split("@");
	// Empfängernamen und Punycode des Domain-Namen zusammen setzen
	t = parts[0] + "@" + java.net.IDN.toASCII(parts[1], java.net.IDN.ALLOW_UNASSIGNED);
         
    return t;
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert