Erweiterung: Welche eMail-Validierung würdet Ihr bevorzugen ?
Enrico
- javascript
Hallo,
Zunächst bitte ich um Entschuldigung, dass ich für meine
"Meinungsforschung" einen neuen Thread eröffnet habe.
Angeregt durch Eure Kritiken habe ich nun die Überprüfung
auf gültige eMail-Adressen der zweiten Variante für die 2-stelligen Ländercodes (TDLs) folgendermassen ausgeweitet:
(b|c|g|l|m|n|p|q|s|u|v|z)a
(b|g|l|s)b
(a|c|e|l|m|n|s|t|v)c
(a|b|c|g|i|m|s|t)d
(a|b|d|e|g|j|k|n|p|r|s|v|y)e
(a|b|c|g|n|p|t|w)f
(a|b|c|e|g|k|m|n|p|s|t|u|v)g
(b|c|e|g|k|m|p|s|t)h
(a|b|c|f|g|k|l|n|s|v)i
(b|d|f|s|t)j
(c|d|f|h|l|m|p|s|t|u)k
(a|c|g|i|m|n|p|s|t)l
(a|b|c|d|f|g|h|i|j|k|m|o|p|s|t|u|z)m
(a|b|c|g|h|i|k|m|p|s|t|v)n
(a|b|c|d|f|i|j|m|n|r|s|t)o
(g|j|k|m|n|t)p
(a|g|i|m)q
(a|b|c|e|f|g|h|i|k|l|m|n|p|s|t)r
(a|b|c|e|g|i|l|m|p|u|w)s
(a|b|e|g|h|i|l|m|p|s|t|y)t
(a|c|e|g|h|l|m|n|r|v|y)u
(b|c|l|m|s|t)v
(a|b|g|k|m|p|r|t|z)w
(a|c|m)x
(b|c|g|k|l|m|p|s|u)y
(a|b|c|d|k|m|n|s|t|u)z
Nun wollte ich diese Ausdrücke noch stärker zusammenfassen, da ich ja
immer das gleiche Schema habe: (Buchstabe|Buchstabe...)Buchstabe
Mein Problem ist nun aber, dass ich nicht immer die gleichen
Buchstaben für bestimmte Länderkennungen habe, da es beispielsweise
für die Endung auf "a" 12 verschiedene Länderkennungen gibt, für die
Endung "b" aber nur 4.
Die unterschiedlichen gTDLs werde ich wohl eigens abfragen müssen,
da ich beispielsweise "aero" nicht vernünftig in den Ausdruck
"(a|b|d|e|g|j|k|n|p|r|s|v|y)e" einbauen kann.
Neuerdings sind ja auch Umlaute und die Sonderzeichen erlaubt, die unter
dem Link "http://www.denic.de/de/richtlinien.html" einsehbar sind.
Wie sieht es hierbei nun mit folgender Zeile aus ?
[1]*[a-z0-9_]@[a-z0-9][a-z0-9-.]*[a-z0-9].[a-z][a-z]$
a-z0-9._ ↩︎
Moin!
Zunächst bitte ich um Entschuldigung, dass ich für meine
"Meinungsforschung" einen neuen Thread eröffnet habe.
Nun gut, wollen wir das mal durchgehen lassen.
Angeregt durch Eure Kritiken habe ich nun die Überprüfung
auf gültige eMail-Adressen der zweiten Variante für die 2-stelligen Ländercodes (TDLs) folgendermassen ausgeweitet:
Du versuchst die Quadratur des Kreises.
Eine EMail-Adresse besteht aus Bestandteilen "Username", "Second-Level-Domains" und "Top-Level-Domain".
Jeder dieser drei Bestandteile kann bei der Eingabe falsch sein, nicht existieren, absichtlich oder versehentlich verschrieben werden etc.
Du bastelst jetzt einen riesigen Apparat nur für den Bestandteil "Top-Level-Domain". Warum? Welchen Vorteil bietet dir das?
Du handelst dir in meinen Augen nur Nachteile ein, aber gewinnst nichts:
Top-Level-Domains neigen dazu, sich auch mal zu ändern. Tatsächlich kommen mal neue Länder hinzu (zuletzt war es IIRC Palästina, aber auch der Zerfall von Jugoslawien brachte neue Länderkennungen hervor) oder verschwinden (auch wenn es jetzt unwahrscheinlich klingt, könnten sich z.B. irgendwann die beiden Teile Koreas (.kp und .kr) wieder vereinigen). Abgesehen von den unendlich vielen möglichen generischen Domains, von denen .info, .biz, .name etc. nur der Anfang sein dürften.
Dadurch wärst du andauernd gezwungen, dein Javascript auf dem aktuellen Stand zu halten, indem du sämtliche Meldungen bezüglich neuer TLDs verfolgst. Das ist aber absolut unrealistisch. Javascripte werden in der Regel einmal irgendwo installiert, und dann werden sie vergessen. Es dürfte jedenfalls äußerst unwahrscheinlich sein, dass du bei allen Webservern deiner Kunden, auf denen irgendeine Version des Skriptes mal zum Einsatz gekommen ist, ständig für neue Versionen sorgst. Das ist ein Pflegeaufwand, den dir kein Kunde bezahlt - also machst du es auch nicht.
Und was den Eigenbedarf für den einen Webauftritt angeht: Was bringt es dir, die Existenz einer Top-Level-Domain exakt zu prüfen, wenn du die Echtheit der restlichen Bestandteile nicht prüfen kannst?
webmaster@horxknorks.de - ein toller Domainname mit einer sehr dauerhaften TLD - aber leider komplett ausgedacht (zumindest zum Zeitpunkt meines Postings). Deine Mailadressenprüfung würde also fehlschlagen.
Wenn du irgendwas prüfen willst, dann prüfe mit Javascript, ob die angegebene Mailadresse so ganz grob tatsächlich stimmen kann. Wie schon erwähnt: Ist ein @ drin, ist ein Punkt hinter dem @ drin, stehen vor, zwischen und hinter diesen beiden Zeichen Buchstaben oder Zahlen?
Serverseitig kannst du dann eine weitergehende Prüfung erledigen. Dort hast du den Vorteil, dass du das DNS-System befragen kannst. Damit kriegst du Aktualisierungen in allen Domainebenen, also sowohl Top-Level-Domains, als auch alle Second-Level-Domains und die Subdomains darunter, topaktuell abgefragt und bist automatisch immer auf dem neuesten Stand.
Allerdings hilft dir das auch noch nicht viel. Denn was nützt dir eine existierende Domain? Ich gebe z.B. gerne "niemand@example.com" an. Diese Domain existiert tatsächlich, sie dient als Beispieldomain, welche man in Dokumentationen verwenden soll - und sie nimmt keinerlei Mails entgegen, weil kein Mailserver läuft.
Du müßtest also zusätzlich noch prüfen, ob du den Mailserver der angegebenen Domain erreichen kannst.
Damit ist dir dann aber immer noch nicht geholfen. Denn der Username kann ja auch noch falsch sein. Und da wirds dann echt schwierig. Denn ein Mailserver hat grundsätzlich drei Optionen:
1. Er lehnt den falschen Usernamen wegen Nichtexistenz als unzustellbar ab. Das ist dein Glücksfall, denn dann weißt du, dass du dem Besucher unter seiner Mailadresse nichts mailen kannst, weil er sich vermutlich verschrieben hat.
2. Er lehnt deinen Mailversuch wegen anderer Umstände ab, beispielsweise wegen falscher Angaben in der SMTP-Unterhaltung, oder wegen des Eintrags deiner Server-IP in Blacklisten. Das ist blöd für dich, weil du dem Benutzer, unabhängig davon, ob seine Mailadresse stimmt oder nicht, trotzdem keine Mail schicken kannst. Du kannst ihm dann aber nicht vorwerfen, seine Mailadresse stimme nicht, sondern lediglich, dass sein Mailserver den Empfang abgelehnt hat, und dass er vielleicht eine andere Adresse eingeben sollte.
3. Der Mailserver nimmt jede Mail an, egal ob korrekte Usernamen oder nicht, und sendet bei falschen Usernamen eine Unzustellbarkeitsbenachrichtigung an den Absender. Das ist das schlechteste Szenario, weil die falschen Mailadressen ebenfalls als auslieferbar gewertet werden müssen - das Eintreffen der Unzustellbarkeitsnachricht kann durchaus Minuten bis Stunden dauern, außerdem geht diese Meldung nicht an dein serverseitiges Skript, sondern an den Mailserver der Mailadresse, die als Absender genannt wurde.
Summa summarum: Wenn du irgendeine Mailadressenprüfung einbauen willst, gibt es realistisch betrachtet nur einen einzigen Weg, eine gültige Mailadresse zu erkennen: Schick eine Mail hin und warte auf positive Nachricht des Empfängers.
- Sven Rautenberg
Hi,
Eine EMail-Adresse besteht aus Bestandteilen "Username", "Second-Level-Domains" und "Top-Level-Domain".
Einspruch. Es sind mehr Teile - es ist durchaus zulässig, auch third-, fourth-, fifth-, ...-level-Domains in der Email-Adresse zu haben - einen kompletten Hostname halt...
cu,
Andreas
Moin!
Eine EMail-Adresse besteht aus Bestandteilen "Username", "Second-Level-Domains" und "Top-Level-Domain".
Einspruch. Es sind mehr Teile - es ist durchaus zulässig, auch third-, fourth-, fifth-, ...-level-Domains in der Email-Adresse zu haben - einen kompletten Hostname halt...
Schrieb ich "Second-Level-Domain", oder "-Domains"? Was wollte ich damit wohl implizieren?
Und gleich kommt noch jemand und wird hinzufügen, das auch lokale Adressen nur mit Hostnamen, aber ohne TLD auch möglich wären... jaja, alles bekannt, ändert aber qualitativ nichts.
- Sven Rautenberg
Hi,
Eine EMail-Adresse besteht aus Bestandteilen "Username", "Second-Level-Domains" und "Top-Level-Domain".
Einspruch. Es sind mehr Teile - es ist durchaus zulässig, auch third-, fourth-, fifth-, ...-level-Domains in der Email-Adresse zu haben - einen kompletten Hostname halt...
Schrieb ich "Second-Level-Domain", oder "-Domains"? Was wollte ich damit wohl implizieren?
a) das s hab ich übersehen - zugegeben.
b) mehrere Second-Level-Domains in einem Hostnamen sind aber nicht sinnvoll - genausowenig wie meherere TLDs ;-)
cu,
Andreas
Hallo Sven,
Und gleich kommt noch jemand und wird hinzufügen, das auch lokale Adressen
nur mit Hostnamen, aber ohne TLD auch möglich wären... jaja, alles bekannt,
ändert aber qualitativ nichts.
Darf ich kommen und hinzufügen, daß man, wenn sich der Empfänger auf demselben
Rechner befindet, auch den Hostnamen und den Klammeraffen weglassen darf?
Darf ich? ;-)
Tim
Moin!
Und gleich kommt noch jemand und wird hinzufügen, das auch lokale Adressen
nur mit Hostnamen, aber ohne TLD auch möglich wären... jaja, alles bekannt,
ändert aber qualitativ nichts.Darf ich kommen und hinzufügen, daß man, wenn sich der Empfänger auf demselben
Rechner befindet, auch den Hostnamen und den Klammeraffen weglassen darf?
Darf ich? ;-)
Nur, wenn du es als Argument für die Unsinnigkeit clientseitiger, javascriptgestützter EMailgültigkeitsprüfung mit einbringst. :)
- Sven Rautenberg
N'Obend
Muss Sven da recht geben. Allerdings will ich mich "etwas" kürzer fassen:
Wer dir seine Mail-Adresse nicht verraten will, den kannst du nicht dazu zwingen.
Fertig.
Da hilft dir auch keine noch so super-aufwändige Adressprüfung.
Tschö,
dbenzhuser