[php] Umlaute in Emailadressen
Johannes Schlueter
schlueter at phpbar.de
Mit Apr 27 17:52:27 CEST 2005
Hi,
auch wenn das eigentliche Problem gelöst ist ein paar Anmerkungen:
On Wednesday 27 April 2005 17:04, Frank Liebelt wrote:
> lieschen.müller at würdegernemailsempfangen.de
[...]
> Dann hoffe ich mal, dass Postfix und phpMailer mit umlauten umgehen können!
Wie schon Albert Weinert geschrieben hat sind nur im hostnamen, nicht im local
part Umlauter erlaubt. Und da grundsätzlich jedes Zeichen was in Unicode
definiert ist. Dieses wird aber wieder von den verschiedenen Registries
eingeschränkt, das DENIC erlaubt für .de z.B. nur Zeichen die es auch im
Latin-1 (iso-8859-1 gibt, etwas genauer, die lateinischen Buchstaben mit den
verschiedenen Akzentarten sowie solche Dinger wie ß und æ)
Da die verantwortlichen nicht wollten dass jeder Server und alles dafür
gepatcht werden muss wurde festgelegt, dass der MUA, also das Programm dass
die E-Mail schickt bzw. Empfängt (MUA = Mail User Agent, in der Regel der
Mail-Client) für die Konvertierung in die Punycode-Form verantwortlich ist
und den Servern die zum schicken verwendet werden, sowie dem dNS dasvon
nichts wissen. Die Punycode-Darstellung ist eine Ersetzung der Sonderzeichen
durch Zeichen aus dem Bereich [a-z], aus www.schlüter.de wird dann z.B.
www.xn--schlter-q2a.de. xn-- ist dabei die Kennzeichnung, dass es Punycode
ist, der Umlaut ist rausgeflogen und q2a ist eine Kodierung der Position und
des Unicodezeichens ü. Eine Sonderolle spielen die Zeichen wie ß und æ die
werden anhand der sogenannten stringprep Tabelle in ss bzw. ae umgeschrieben.
Da wird kein xn-- oder so vorgesehen. mit einem IDN-Fähigen Client sollte man
also auch die Website der Stadt Essen über www.eßen.de erreichen :-)
Nach dem Ausflug über die Interna wieder zurück zu PHP: Wie gesagt ist der MUA
verantwortlich. Wer per PHP eine Mail sendet ist MUA und muss sich um die
Konvertierung kümmern. Da gibt es 1,5 Ansätze. Der funktionierende Ansatz ist
die PEAR Net_IDNA Klasse die zum Übersetzen verwendet werdne kann. Der halbe
Weg ist meine idn Extension in PECL - die tut das was ich wollte als ich die
schnell zusammengehackt habe aber nicht viel mehr. Sie basiert auf der GNU
libidn die z.B. es auch ermöglichen würde anhand gewisser Tabellen zu checken
ob nur erlaubte Zeichen im Hostname sind - aber die müsste, wenn ich mal die
Zeit und Lust habe, rewritten werden.
johannes
P.S. Der RFC-konforme Check für E-Mail-Adressen ist der:
http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html ;-)