Im ersten Teil ging es um die aktuellen RFCs, den Aufbau einer E-Mail-Adresse und der erlaubten Zeichen innerhalb einer Adresse. Wie wir nun wissen, kann eine E-Mail-Adresse nach RFC 6531 nun auch aus UTF-8 Zeichen bestehen, was die Frage nach der maximalen Länge einer Adresse etwas verkompliziert.

Maximale Länge

In der RFC 5321 steht, dass der local-part (also der Teil vor dem ) maximal 64 Oktetts lang sein darf. Rechnet man die maximal 255 Oktette für den domain-part hinzu, käme man auf 320 Oktetts. Das ist allerdings falsch! Denn etwas weiter unten in der RFC steht dass der Pfad (inklusive @ < > ) maximal 254 Oktetts lang sein darf.

Warum reite ich hier auf dem Begriff Oktett herum und spreche nicht einfach von Zeichen? Das hat mit UTF-8 Zeichen zu tun. Solange die Adresse nur aus Ascii-Zeichen besteht, kann man die Rechnung 1 Oktett = 1 Zeichen anstellen. Verwendet man jedoch auch Zeichen aus dem UTF-8-Zeichensatz, die nicht im Acii-Zeichensatz enthalten sind, können pro Zeichen bis zu 4 Oktetts benötigt werden.

Address Tag

Ein + im local-part, zum Beispiel in der Adresse stefan+newsletter@example.com, bedeutet, dass die E-Mail an das Postfach stefan@example.com gesendet wird. Der Teil nach dem + (kann je nach MTA z.B. bei qmail auch ein - sein) wird entweder ignoriert oder kann dazu benutzt werden, die empfangene E-Mail in einen existierenden Ordner im Postfach einzusortieren.

Praktisch nutzbar ist dieser Trick, um zum Beispiel je nach Newsletter eine E-Mail-Adresse angeben zu können und zu sehen, wo die Adresse noch überall benutzt wird. Auch kann man zum Beispiel mehrere Benutzeraccounts benötigt werden, jedoch eine Mailadresse nur einmal existieren darf.

Fazit - Wie kann man jetzt die E-Mail-Adresse validieren?

Ich denke, die Frage muss anders gestellt werden. Muss ich eine E-Mail-Addresse prüfen, so dass komplett alle Regeln der diverse RFCs zur Anwendung kommen? Oder genügt es mir, dass eine E-Mail-Adresse zu einem Schema, zum Beispiel dass meines Kunden (der vielleicht vorname.nachname@example.com als internen Standard definiert hat) passt? Oder ist mir der Aufbau der Adresse eigentlich komplett egal und mir ist nur wichtig, dass meine E-Mails beim Anwender ankommen?

Gerade die letzte Frage, nach dem Ankommen der E-Mail, ist in meinem Augen die wirklich entscheidende Frage. Eine Adresse max.mustermann@example.org ist zwar syntaktisch korrekt - aber existiert eigentlich ein passendes Postfach dafür? Eine Validierung würde vermutlich die Addresse als gültig durchwinken, sie würde trotzdem niemand erreichen. Gründe dafür wären zum einen das es keinen MX Record für example.com gibt und zum anderen dass der Host, der hinter dem A Record sitzt, nicht auf Port 25 lauscht und damit kein SMTP Server für die Domain example.com existiert.

Meiner Meinung nach ist es am Besten, wenn man einen Aktivierungslink generiert und dem Anwender nach der Registrierung bzw. Eingabe einer neuen E-Mail-Adresse eine Bestätigungsemail sendet. Wird die Applikation nur unternehmensintern genutzt, so macht es eventuell Sinn, auf das im Unternehmen übliche Adressierungsschema zu validieren, aber Ausnahmen zuzulassen und nur eine Warnung in der GUI anzuzeigen.