Sabine: Ultimativer Test für Email Adressen

Hallo,

ich suche ein JavaScript mit dem ich die formale Korrektheit einer Email Adresse prüfen kann.
Im Netz kursieren eine Menge davon. Fast jeder Autot behaupten, dass seine Version die eine oder ander Unzulänglichkeit der anderen Lösungen nicht hat.

Gibt es so etwas wie die "ultimative" Version?

LG
Sabine

  1. Moin,

    ich suche ein JavaScript mit dem ich die formale Korrektheit einer Email Adresse prüfen kann.

    Dann hast du bestimmt schon https://de.wikipedia.org/wiki/E-Mail-Adresse und die Verweise auf die RFCs darin gelesen. Für die korrekte formale Überprüfung musst du einen Parser schreiben.

    Im Netz kursieren eine Menge davon. Fast jeder Autot behaupten, dass seine Version die eine oder ander Unzulänglichkeit der anderen Lösungen nicht hat.

    Gibt es so etwas wie die "ultimative" Version?

    Ja, entsprechend der o.g. RFCs.

    Viele Grüße,
    Robert

    1. Hallo Robert,

      Dann hast du bestimmt schon https://de.wikipedia.org/wiki/E-Mail-Adresse und die Verweise auf die RFCs darin gelesen. Für die korrekte formale Überprüfung musst du einen Parser schreiben.

      Der Aufbau eine Email Adresse ist mir schon klar. Dass man dann eine Parser schreiben kann und dann prüfen muss, ob die einzelnen Teile der Spezifikation entsprechen, auch.

      Aber 1. wollte ich das Rad nicht zum x-ten mal neu erfinden. Ich denke mit diesem Problem haben sich hier schon sehr viele Leute beschäftigt. Ein solcher Austausch ist doch wohl u.a. Sinn und Zweck eines Forums wie diese hier, oder?

      2. lauern offenbar bei der Umsetzung des auf den ersten Blick trivial aussehenden Problems doch ein paar Fallstricke. Andersn kann ich mir den Wust an Versionen im Netz nicht erklären.

      Gibt es so etwas wie die "ultimative" Version?

      Ja, entsprechend der o.g. RFCs.

      Wie gesagt, ich suche nach einer fertigen Lösung dieses Standardproblems. Nicht weil ich zu faul bin sondern wegen 1., siehe oben.

      LG Sabine

      1. Mahlzeit,

        du solltest erstmal definieren, wo dein Problem liegt. Eine gültige Mailadresse macht noch keine existierende Mailadresse.
        Clientseitige Prüfungen sind grundsätzlich manipulierbar.

        IMO reicht eine Prüfung auf ein @ und ob rechts davon mindestens ein Punkt existiert. Theoretisch wären zwar auch Mailadressen wie example@de möglich, in freier Wildbahn dürfte das aber nicht vorkommen. Da gehen die Meinungen sicher auseinander, ist mir klar.

        Die Existenzprüfung musst du eh serverseitig machen.

        Dass es keine ultimative Version einer Mailprüfung in JS gibt, liegt wohl daran, dass sie nicht wirklich nötig ist.

        --
        42
        1. Hallo,

          du solltest erstmal definieren, wo dein Problem liegt.

          Ich möchte per JS prüfen, ob eine eingegeben Email Adresse syntaktisch korrekt ist.
          Nicht mehr und nicht weniger.

          Eine gültige Mailadresse macht noch keine existierende Mailadresse.

          Das weiß ich und möchte ich auch nicht.

          Clientseitige Prüfungen sind grundsätzlich manipulierbar.

          Das weiß ich. Es eine syntaktische, clientseitige Prüfung kann aber (zumindest in meinem Anwendungsfall) den allergrößten Teil der Falschangaben herausfiltern. Mit dem Rest kann ich leben. Auch mit clientseitigen Manipulationen. Die dürften in meinem Fall eher unwahrscheinlich, auf jeden Fall aber nicht "mission critical" sein.

          IMO reicht eine Prüfung auf ein @ und ob rechts davon mindestens ein Punkt existiert. Theoretisch wären zwar auch Mailadressen wie example@de möglich, in freier Wildbahn dürfte das aber nicht vorkommen. Da gehen die Meinungen sicher auseinander, ist mir klar.

          Zitat wikipedia: Der Domänenteil, der hinter dem @-Zeichen steht und für den die Syntaxregeln des Domain Name Systems gelten, besteht mindestens aus drei Teilen: einem Hostnamen (z. B. ein Firmenname), einem Punkt und einer Top-Level-Domain (häufig ein Ländercode oder wie im Beispiel: „com“).

          Das von Die angegeben "example@de" würde also nicht gehen...

          Die Existenzprüfung musst du eh serverseitig machen.

          Wie gesagt, Syntax- nicht Existenzprüfung.

          LG
          Sabine

          1. Mahlzeit,

            Das von Die angegeben "example@de" würde also nicht gehen...

            Weil es Wikipedia sagt? Wieso glaubst du, könnte das DENIC eG davon abhalten, @de als Maildomain zu nutzen?
            Ich hab jetzt den RFC nicht im Kopf, aber wenn es da nicht explizit ausgeschlossen wqird, ist der Wiki-Beitrag fehlerhaft.

            Wir hatten die Diskussion vor einigen Jahren schonmal. Und dass Wikipedia nicht frei von Fehlern ist, sollte langsam auch bekannt sein.

            --
            42
            1. Meine Herren!

              Ich hab jetzt den RFC nicht im Kopf, aber wenn es da nicht explizit ausgeschlossen wqird, ist der Wiki-Beitrag fehlerhaft.

              Wenn ich den RFC richtig lese, dann hat Wikipedia hier wirklich einen Fehler:

              Denn, wenn man dieser Randnotiz folgt (http://tools.ietf.org/html/rfc5321#section-2.3.5).

              Note: A liberal syntax for the domain portion of addr-spec is
                   given here.  However, the domain portion contains addressing
                   information specified by and used in other protocols (e.g.,
                   [RFC1034], [RFC1035], [RFC1123], [RFC5321]).  It is therefore
                   incumbent upon implementations to conform to the syntax of
                   addresses for the context in which they are used.

              Und dem RFC 5321 folgt, gelant man zu folgender Regulation (http://tools.ietf.org/html/rfc5321#section-2.3.5)

              A domain name (or often just a "domain") consists of one or more
                components, separated by dots if more than one appears.

              --
              “All right, then, I'll go to hell.” – Huck Finn
            2. Das von Die angegeben "example@de" würde also nicht gehen...

              Weil es Wikipedia sagt? Wieso glaubst du, könnte das DENIC eG davon abhalten, @de als Maildomain zu nutzen?

              Ich vermute nicht, dass sich das Problem bei @de stellen wird.

              Andererseits sind die ganzen neuen TLDs, die jetzt oder in Kürze das Internet überschwemmen werden (@berlin, @hamburg, @nrw, usw.) vielleicht eher eine Baustelle, bei der man dieses Problem im Auge behalten sollte.

          2. @@Sabine:

            nuqneH

            Ich möchte per JS prüfen, ob eine eingegeben Email Adresse syntaktisch korrekt ist.

            Wozu? Die Funktion ist in modernen Browsern bereits nativ vorhanden; <input type="email"> wurde bereits genannt. Warum willst du noch eine clientseitige Validierung? Zumal serverseitig sowieso validiert werden sollte.

            IMO reicht eine Prüfung auf ein @ und ob rechts davon mindestens ein Punkt existiert.

            Ja, man könnte noch prüfen, ob links vom @, zwischen @ und . und rechts vom . jeweils noch mindestens ein Zeichen steht. Aber Zeichen, nicht ASCII-Zeichen, sonst werden gültige E-Mail-Adressen ungültig erklärt.

            Qapla'

            --
            „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
      2. Moin Sabine,

        Aber 1. wollte ich das Rad nicht zum x-ten mal neu erfinden. Ich denke mit diesem Problem haben sich hier schon sehr viele Leute beschäftigt. Ein solcher Austausch ist doch wohl u.a. Sinn und Zweck eines Forums wie diese hier, oder?

        Hast du schon im Archiv gesucht? Die meisten Diskussionen zum Thema gab es allerdings AFAIK über reguläre Ausdrücke – und das funktioniert formal nicht, wegen der rekursiven Definition des Namensteils.

        1. lauern offenbar bei der Umsetzung des auf den ersten Blick trivial aussehenden Problems doch ein paar Fallstricke. Andersn kann ich mir den Wust an Versionen im Netz nicht erklären.

        Es geht dort meist um o.g. Problem und mögliche Vereinfachungen.

        Viele Grüße,
        Robert

  2. Meine Herren!

    Gibt es so etwas wie die "ultimative" Version?

    Wie wäre es mit <input type="email">? Zusätzlich könntest du noch eine Verifizierungs-Email versenden, um den Besitz des Nutzers dieser Adresse zu verifizieren.

    --
    “All right, then, I'll go to hell.” – Huck Finn
    1. Mein Herr :-)

      Wie wäre es mit <input type="email">?

      Was macht das Browserintern? Eine Syntaxprüfung? Wie geht die?

      1. Meine Herren!

        Wie wäre es mit <input type="email">?

        Was macht das Browserintern? Eine Syntaxprüfung? Wie geht die?

        Die Syntax-Regeln stehen im HTML5-Standard. Dort findet sich auch der Hinweis darauf, dass die Gültigkeit beabsichtigt von der in RFC 5322 abweicht.

        --
        “All right, then, I'll go to hell.” – Huck Finn
        1. Hallo,

          Die Syntax-Regeln stehen im HTML5-Standard. Dort findet sich auch der Hinweis darauf, dass die Gültigkeit beabsichtigt von der in RFC 5322 abweicht.

          Der dortigen reguläre Ausdruck lässt sich auch direkt in JavaScript übernehmen. Oder man nutzt ein komplexeren Polyfill für <input type="email"> und andere Formularelemente, z.B. https://github.com/dsheiko/HTML5-Form-Shim.

          Mathias

          1. @@molily:

            nuqneH

            Die Syntax-Regeln stehen im HTML5-Standard.

            Der dortigen reguläre Ausdruck lässt sich auch direkt in JavaScript übernehmen.

            Nei-en!! Das wäre grober Unfug.

            Browser sind zum Glück nicht mehr so dumm, den obsoleten RFC 5322 zu implementieren. Es wäre ziemlich dumm, selbst eine Validierung nach RFC 5322 in JavaScript zu implementieren.

            Damit würde man gültige E-Mail-Adressen wie mathias@schäfer.example oder иван@царевич.испытание abweisen.

            Die HTML5-Validierung in Firefox lässt beide durch. Chrome ist noch nicht soweit und akzeptiert Nicht-ASCII-Zeichen nur hinter dem @ (d.h. auch ivan@царевич.испытание würde er akzeptieren).

            Mögen nicht-lateinische Zeichen für unseren Kulturkreis irrelevant erscheinen, Umlaute sind es nicht. Die dürfen in einer E-Mail-Adresse vorkommen; wir haben schließlich 2014 und nicht 1994.

            Qapla'

            --
            „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
            1. Hallo,

              Browser sind zum Glück nicht mehr so dumm, den obsoleten RFC 5322 zu implementieren.

              Oha, so genau hatte ich mir den regulären Ausdruck nicht angesehen. Wieso steht das denn immer noch im Working Draft für HTML 5.1 vom 17. Juni 2014? Gibt’s ein Issue dazu? Eine Spezifikation, die jetzt schon von Browsern sinnvollerweise ignoriert wird, die selbst vom veralteten RFC 5322 abweicht, ergibt wenig Sinn…

              Ich vermute, dass ein korrekter Polyfill nicht so einfach möglich ist. So richtig verstehe ich RFC 6531 auch nicht. Es definiert, soweit ich das sehe, dass die fraglichen Teile der E-Mail-Adresse aus beliebigen UTF-8-kodierten Zeichen bestehen dürfen. Schon klar, aber das kann doch nicht alles sein?

              Mögen nicht-lateinische Zeichen für unseren Kulturkreis irrelevant erscheinen, Umlaute sind es nicht. Die dürfen in einer E-Mail-Adresse vorkommen; wir haben schließlich 2014 und nicht 1994.

              Du hast schon recht. Allerdings bezweifle ich, dass das schon jemand tut. Der RFC, den du verlinkt hast, ist gerade einmal zwei Jahre alt. Nutzt das jemand in der Praxis, also auf der linken Seite des @? Dafür müssen ja alle beteiligten Mail-Transfer-Agents den RFC implementieren.

              Mathias

              1. @@molily:

                nuqneH

                Du hast schon recht. Allerdings bezweifle ich, dass das schon jemand tut. Der RFC, den du verlinkt hast, ist gerade einmal zwei Jahre alt. Nutzt das jemand in der Praxis, also auf der linken Seite des @? Dafür müssen ja alle beteiligten Mail-Transfer-Agents den RFC implementieren.

                Henne-Ei-Problem. Nutzt das kaum jemand, weil es von vielen Mailprovidern/Mailclients nicht unterstützt wird, oder wird es von vielen Mailprovidern/Mailclients nicht unterstützt, weil es kaum jemand nutzt?

                Den Teufelskreis können nur die Mailprovidern/Mailclients durchbrechen. Die sollten endlich Nicht-ASCII-Zeichen in E-Mail-Adressen unterstützen, und zwar in allen Teilen.

                Qapla'

                --
                „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)