Welche Zeichen sind in einer E-Mail-Adresse zulässig?


639

Ich frage nicht nach einer vollständigen E-Mail-Validierung.

Ich möchte nur wissen, welche Zeichen user-nameund serverTeile der E-Mail-Adresse zulässig sind . Dies kann zu stark vereinfacht sein, möglicherweise können E-Mail-Adressen andere Formen annehmen, aber das ist mir egal. Ich user-name@serverfrage nur nach dieser einfachen Form: (zB wild.wezyr@best-server-ever.com) und erlaubten Zeichen in beiden Teilen.


184
Das +ist erlaubt. Es macht mich verrückt, wenn Websites dies nicht zulassen, weil meine E-Mail eine enthält +und so viele Websites dies nicht zulassen.
Dan Herbert

42
Ich denke, es ist wichtig, Links zu Spezifikationen zu geben, da Sie dies wirklich richtig machen möchten, und hier kommt die Spezifikation ins Spiel. Wenn Sie zu faul sind, die Spezifikation zu lesen und zu verstehen, lassen Sie bitte die E-Mail-Adressen nach zulässigen Zeichen suchen an Leute, die sich für dieses Zeug interessieren.
Jhwist

9
Frühere Frage zum gleichen Material: stackoverflow.com/questions/760150/ . Das Traurige ist, obwohl diese Frage fast 8 Monate älter ist als diese, hat die ältere Frage viel bessere Antworten. Fast alle Antworten unten waren bereits veraltet, als sie ursprünglich veröffentlicht wurden. Siehe Wikipedia-Eintrag (und keine Sorge, er enthält relevante offizielle Referenzen ).
John Y

10
Im Gegensatz zu mehreren Antworten, Räume werden in dem lokalen Teil der E - Mail - Adressen erlaubt, wenn angegeben. "hello world"@example.comist gültig.
user253751

3
@LaraRuffleColes - Wenn Sie in Google Mail ein E-Mail-Konto erstellen, können Sie keine Adressen mit einem "+" - Zeichen erstellen. Mit dem "+" - Zeichen ("Plus-Adressierung") kann jeder mit einer Google Mail-Adresse ein "+" - Zeichen gefolgt von einer "Zeichenfolge" am Ende seines Benutzernamens hinzufügen, um eine "alternative" ("Alias") E-Mail-Adresse zu erstellen für ihr Konto zu verwenden. Beispiel: "example@gmail.com", "example+tag@gmail.com". Eine typische (und wahrscheinlich "primäre") Verwendung besteht darin, Alias-E-Mail-Adressen für Ihr Konto zu erstellen, mit denen Sie eingehende E-Mail-Nachrichten markieren und filtern können, die theoretisch nach Absender gefiltert werden.
Kevin Fegan

Antworten:


797

Siehe RFC 5322: Internetnachrichtenformat und in geringerem Umfang RFC 5321: Simple Mail Transfer Protocol .

RFC 822 deckt auch E-Mail-Adressen ab, befasst sich jedoch hauptsächlich mit seiner Struktur:

 addr-spec   =  local-part "@" domain        ; global address     
 local-part  =  word *("." word)             ; uninterpreted
                                             ; case-preserved

 domain      =  sub-domain *("." sub-domain)     
 sub-domain  =  domain-ref / domain-literal     
 domain-ref  =  atom                         ; symbolic reference

Und wie immer hat Wikipedia einen anständigen Artikel über E-Mail-Adressen :

Der lokale Teil der E-Mail-Adresse kann eines dieser ASCII-Zeichen verwenden:

  • Lateinische Groß- und Kleinbuchstaben Aan Zund abis z;
  • Ziffern 0zu 9;
  • Sonderzeichen !#$%&'*+-/=?^_`{|}~;
  • Punkt ., vorausgesetzt, es ist nicht das erste oder letzte Zeichen, sofern nicht angegeben, und vorausgesetzt, dass es nicht fortlaufend angezeigt wird, sofern nicht angegeben (z. B. John..Doe@example.comnicht zulässig, aber "John..Doe"@example.comzulässig);
  • Leerzeichen und "(),:;<>@[\]Zeichen sind mit Einschränkungen zulässig (sie sind nur innerhalb einer Zeichenfolge in Anführungszeichen zulässig, wie im folgenden Absatz beschrieben, und außerdem muss vor einem Backslash oder einem doppelten Anführungszeichen ein Backslash stehen).
  • Kommentare sind in Klammern an beiden Enden des lokalen Teils zulässig. zB john.smith(comment)@example.comund (comment)john.smith@example.comsind beide gleichbedeutend mit john.smith@example.com.

Zusätzlich zu den ASCII-Zeichen können Sie ab 2012 die oben genannten internationalen Zeichen verwendenU+007F , die als UTF-8 codiert sind, wie in der RFC 6532-Spezifikation beschrieben und auf Wikipedia erläutert . Beachten Sie, dass diese Standards ab 2019 immer noch als vorgeschlagen gekennzeichnet sind, aber nur langsam eingeführt werden. Durch die Änderungen in dieser Spezifikation wurden im Wesentlichen internationale Zeichen als gültige alphanumerische Zeichen (atext) hinzugefügt, ohne die Regeln für zulässige und eingeschränkte Sonderzeichen wie !#und zu beeinflussen @:.

Informationen zur Validierung finden Sie unter Verwenden eines regulären Ausdrucks zum Validieren einer E-Mail-Adresse .

Das domainTeil ist wie folgt definiert :

Die Internet - Standards (Request for Comments) für Protokolle Mandat , dass Komponente Host - Namen Etiketten nur die ASCII - Buchstaben enthalten , adurch z(in Groß- und Kleinschreibung), die Ziffern 0durch 9, und der Bindestrich ( -). Die ursprüngliche Spezifikation von Hostnamen in RFC 952 sah vor , dass Beschriftungen nicht mit einer Ziffer oder einem Bindestrich beginnen dürfen und nicht mit einem Bindestrich enden dürfen. Eine nachfolgende Spezifikation ( RFC 1123 ) erlaubte jedoch, dass Hostnamenbezeichnungen mit Ziffern beginnen. Andere Symbole, Satzzeichen oder Leerzeichen sind nicht zulässig.


15
@ WildWzyr, so einfach ist das nicht. E-Mail-Adressen haben viele Regeln für das, was erlaubt ist. Es ist einfacher, sich auf die Spezifikation zu beziehen, als alle aufzulisten. Wenn Sie den vollständigen Regex möchten, lesen Sie hier, um eine Vorstellung davon zu bekommen, warum dies nicht so einfach ist: regulär-expressions.info
Dan Herbert

6
Es gibt keine einfache Liste, nur weil Sie etwas Einfaches wollen, heißt das nicht, dass es so sein wird. Einige Charaktere können sich nur an bestimmten Orten befinden und nicht an anderen. Sie können nicht immer das haben, was Sie wollen.

15
@WildWezyr Nun, der Punkt im lokalen Teil ist zulässig. Aber nicht am Anfang oder Ende. Oder mit einem anderen Punkt. Die Antwort ist also NICHT so einfach wie nur eine Liste zulässiger Zeichen. Es gibt Regeln, wie diese Zeichen verwendet werden dürfen. Es .ann..other.@example.comhandelt sich nicht um eine gültige E-Mail-Adresse, ann.other@example.comobwohl beide dieselben Zeichen verwenden.
Mark Pim

14
Denken Sie auch daran, dass bei eingehenden internationalisierten Domain-Namen die Liste der zulässigen Zeichen explodiert.
Chinmay Kanchi

50
Dies ist aufgrund internationalisierter Adressen nicht mehr die gültige Antwort. Siehe Masons Antwort.
ZacharyP

329

Achtung! In diesem Thread gibt es eine Menge Wissensfäule (Dinge, die früher wahr waren und jetzt nicht mehr wahr sind).

Um falsch-positive Ablehnungen tatsächlicher E-Mail-Adressen in der gegenwärtigen und zukünftigen Welt und von überall auf der Welt zu vermeiden, müssen Sie mindestens das übergeordnete Konzept von RFC 3490 "Internationalisierung von Domainnamen in Anwendungen (IDNA)" kennen. Ich weiß, dass die Leute in den USA und A oft nicht darüber informiert sind, aber es ist weltweit bereits weit verbreitet und wird immer häufiger verwendet (hauptsächlich in nicht englisch dominierten Teilen).

Das Wesentliche ist, dass Sie jetzt Adressen wie mason @ 日本 .com und wildwezyr@fahrvergnügen.net verwenden können. Nein, dies ist noch nicht mit allem kompatibel (wie viele oben beklagt haben, werden selbst einfache qmail-artige + ident-Adressen oft fälschlicherweise abgelehnt). Aber es gibt einen RFC, es gibt eine Spezifikation, die jetzt von IETF und ICANN unterstützt wird, und - was noch wichtiger ist - es gibt eine große und wachsende Anzahl von Implementierungen, die diese Verbesserung unterstützen und derzeit in Betrieb sind.

Ich wusste selbst nicht viel über diese Entwicklung, bis ich nach Japan zurückkehrte und E-Mail-Adressen wie hei @ や る .ca und Amazon-URLs wie diese sah:

http://www.amazon.co.jp/ - / b / ref = topnav_storetab_e? ie = UTF8 & node = 3210981

Ich weiß, dass Sie keine Links zu Spezifikationen wünschen, aber wenn Sie sich ausschließlich auf das veraltete Wissen von Hackern in Internetforen verlassen, lehnt Ihr E-Mail-Validator E-Mail-Adressen ab, von denen nicht englischsprachige Benutzer zunehmend erwarten, dass sie funktionieren. Für diese Benutzer ist eine solche Validierung genauso ärgerlich wie die alltägliche hirntote Form, die wir alle hassen, die nicht mit einem + oder einem dreiteiligen Domainnamen oder was auch immer umgehen kann.

Ich sage also nicht, dass es kein Ärger ist, aber die vollständige Liste der Zeichen, die "unter bestimmten Bedingungen" zulässig sind, enthält (fast) alle Zeichen in allen Sprachen. Wenn Sie "alle gültigen E-Mail-Adressen akzeptieren möchten (und viele auch ungültige)", müssen Sie IDN berücksichtigen, was einen zeichenbasierten Ansatz grundsätzlich unbrauchbar macht (sorry), es sei denn, Sie konvertieren zuerst die internationalisierten E-Mail-Adressen in Punycode .

Danach können Sie (den meisten) den obigen Ratschlägen folgen.


17
Recht; hinter den Kulissen sind die Domainnamen immer noch nur ASCII. Wenn Ihre Webanwendung oder Ihr Formular jedoch vom Benutzer eingegebene Eingaben akzeptiert, muss sie denselben Job ausführen wie der Webbrowser oder der E-Mail-Client, wenn der Benutzer einen IDN-Hostnamen eingibt: um die Benutzereingaben in DNS-kompatible Formulare zu konvertieren. Dann validieren. Andernfalls bestehen diese internationalisierten E-Mail-Adressen Ihre Validierung nicht. (Konverter wie der, den ich verlinkt habe, um nur die Nicht-ASCII-Zeichen zu ändern, die ihnen zugewiesen wurden, sodass sie sicher für nicht internationalisierte E-Mail-Adressen verwendet werden können (diese werden nur unverändert zurückgegeben).)
Mason

2
Für Javascript-Entwickler recherchiere ich jetzt nach Methoden, und Punycode.js scheint die vollständigste und ausgefeilteste Lösung zu sein.
Wwaawaw

5
Beachten Sie, dass Internationalized Email (wie derzeit definiert) keine Nicht-ASCII-Adressen mit Punycode oder ähnlichem konvertiert, sondern große Teile des SMTP-Protokolls selbst für die Verwendung von UTF8 erweitert.
IMSoP

2
Vermisse ich etwas oder kann dies die Frage nicht beantworten? Ich lese "Die andere Antwort ist falsch, Sie müssen mehr Zeichen akzeptieren", kann dann aber nicht angeben, welche zusätzlichen Zeichen vorhanden sind. Ich konnte in diesem RFC auch (leicht) nicht sehen, ob es sich um alle Unicode-Codepunkte oder nur um das BMP handelt.
Samuel Harmer

3
Dies scheint auf dem richtigen Weg zu sein, um die richtige Antwort zu sein. Ich wette, es würde viel mehr Stimmen bekommen, wenn Sie Angaben zu reservierten und erlaubten Charakteren machen würden.
Sean

59

Das Format der E-Mail-Adresse lautet: local-part@domain-part(max. 64 @ 255 Zeichen, insgesamt nicht mehr 256).

Die local-partund domain-partkönnten unterschiedliche zulässige Zeichen haben, aber das ist noch nicht alles, da es mehr Regeln gibt.

Im Allgemeinen kann der lokale Teil folgende ASCII-Zeichen haben:

  • Kleinbuchstaben lateinischen Buchstaben: abcdefghijklmnopqrstuvwxyz,
  • Großbuchstaben lateinische Buchstaben: ABCDEFGHIJKLMNOPQRSTUVWXYZ,
  • Ziffern : 0123456789,
  • Sonderzeichen: !#$%&'*+-/=?^_`{|}~,
  • Punkt: .(nicht erstes oder letztes Zeichen oder wiederholt, sofern nicht anders angegeben),
  • Leerzeichen wie: "(),:;<>@[\](mit einigen Einschränkungen),
  • Kommentare: ()(sind in Klammern erlaubt, zB (comment)john.smith@example.com).

Domain-Teil:

  • Kleinbuchstaben lateinischen Buchstaben: abcdefghijklmnopqrstuvwxyz,
  • Großbuchstaben lateinische Buchstaben: ABCDEFGHIJKLMNOPQRSTUVWXYZ,
  • Ziffern : 0123456789,
  • Bindestrich: -(nicht erstes oder letztes Zeichen),
  • kann eine IP-Adresse enthalten, die in eckige Klammern gesetzt ist: jsmith@[192.168.2.1]oder jsmith@[IPv6:2001:db8::1].

Diese E-Mail-Adressen sind gültig:

  • prettyandsimple@example.com
  • very.common@example.com
  • disposable.style.email.with+symbol@example.com
  • other.email-with-dash@example.com
  • x@example.com (lokaler Teil mit einem Buchstaben)
  • "much.more unusual"@example.com
  • "very.unusual.@.unusual.com"@example.com
  • "very.(),:;<>[]\".VERY.\"very@\ \"very\".unusual"@strange.example.com
  • example-indeed@strange-example.com
  • admin@mailserver1 (lokaler Domainname ohne Top-Level-Domain)
  • #!$%&'*+-/=?^_`{}|~@example.org
  • "()<>[]:,;@\\"!#$%&'-/=?^_`{}| ~.a"@example.org
  • " "@example.org (Leerzeichen zwischen den Anführungszeichen)
  • example@localhost (gesendet von localhost)
  • example@s.solutions(Siehe Liste der Internet-Top-Level-Domains. )
  • user@com
  • user@localserver
  • user@[IPv6:2001:db8::1]

Und diese Beispiele für ungültig:

  • Abc.example.com(kein @Charakter)
  • A@b@c@example.com(nur eines @ist außerhalb von Anführungszeichen erlaubt)
  • a"b(c)d,e:f;gi[j\k]l@example.com (Keines der Sonderzeichen in diesem lokalen Teil darf außerhalb von Anführungszeichen stehen.)
  • just"not"right@example.com (Zeichenfolgen in Anführungszeichen müssen durch Punkte getrennt sein oder das einzige Element, aus dem der lokale Teil besteht.)
  • this is"not\allowed@example.com (Leerzeichen, Anführungszeichen und Backslashes dürfen nur in Zeichenfolgen in Anführungszeichen und vor einem Backslash vorhanden sein.)
  • this\ still\"not\allowed@example.com (Auch wenn Escapezeichen (vorangestellt von einem Backslash) stehen, müssen Leerzeichen, Anführungszeichen und Backslashes immer noch in Anführungszeichen enthalten sein.)
  • john..doe@example.com(doppelter Punkt vorher @); (mit Vorbehalt: Google Mail lässt dies durch)
  • john.doe@example..com(doppelter Punkt nach @)
  • eine gültige Adresse mit einem führenden Leerzeichen
  • eine gültige Adresse mit einem nachgestellten Leerzeichen

Quelle: E-Mail-Adresse bei Wikipedia


Perls RFC2822-Regex zum Überprüfen von E-Mails:

(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ 
\t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\
r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
 \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)
?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]
)*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
 \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*
)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)
*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+
|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r
\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t
]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031
]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?
:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?
:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?
[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] 
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|
\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"
(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?
:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[
\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-
\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(
?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;
:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([
^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\"
.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\
]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\
[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\
r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] 
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]
|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0
00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\
.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,
;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?
:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[
^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]
]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(
?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(
?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[
\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t
])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t
])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?
:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|
\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:
[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\
]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)
?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["
()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)
?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>
@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[
 \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,
;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:
\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[
"()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])
*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
?:\r\n)?[ \t])*))*)?;\s*)

Der vollständige reguläre Ausdruck für RFC2822-Adressen betrug lediglich 3,7 KB.

Siehe auch: RFC 822 Email Address Parser in PHP .


Die formalen Definitionen von E-Mail-Adressen finden Sie in:

  • RFC 5322 (Abschnitte 3.2.3 und 3.4.1, veraltet RFC 2822), RFC 5321, RFC 3696,
  • RFC 6531 (zulässige Zeichen).

Verbunden:


5
Als zusätzliche Vorsicht für potenzielle Implementierer dieses regulären Ausdrucks: Nicht. Stellen Sie einfach sicher, dass es dem Format entspricht, something@something.somethingund nennen Sie es einen Tag.
Chris Sobolewski

Während so etwas nicht wartbar ist, ist es eine schöne Übung, um zu dekodieren und tatsächlich herauszufinden, was es tut
Uhr unjankify

@ChrisSobolewski erlauben mehrere Dinge auf beiden Seiten des '@'
Jasen

Ich habe versucht, dies in postfix über die pcre-Zugriffstabelle unter einer Einschränkung von check_recipient_access zu implementieren, indem ich zuerst die 3 langen pcres (von der verlinkten Seite) in jeweils eine Zeile verwandelte und so nach oben und unten ging: /^[...pcre ..] $ / DUNNO, dann Hinzufügen einer letzten Zeile /.*/ REJECT, aber es erlaubt immer noch durch ungültige E-Mail-Adressen. Postfix 3.3.0; Perl 5, Version 26, Subversion 1 (v5.26.1).
Scoobydoo

3
Wahnsinn sage ich. Wer würde es jemals in der Produktion verwenden. Es gibt einen Punkt, an dem reguläre Ausdrücke nicht mehr verwendet werden sollten. Es ist weit über diesen Punkt hinaus.
Tomuxmon

22

Wikipedia hat einen guten Artikel dazu , und die offizielle Spezifikation ist hier . Aus Wikipdia:

Der lokale Teil der E-Mail-Adresse kann eines dieser ASCII-Zeichen verwenden:

  • Englische Groß- und Kleinbuchstaben (az, AZ)
  • Ziffern 0 bis 9
  • Figuren ! # $% & '* + - / =? ^ _ `{| } ~
  • Charakter. (Punkt, Punkt, Punkt), vorausgesetzt, es ist nicht das erste oder letzte Zeichen, und vorausgesetzt, es erscheint nicht zwei- oder mehrmals hintereinander.

Darüber hinaus sind Zeichenfolgen in Anführungszeichen (z. B. "John Doe" @ example.com) zulässig, sodass Zeichen zulässig sind, die ansonsten verboten wären, die jedoch in der gängigen Praxis nicht vorkommen. RFC 5321 warnt außerdem, dass "ein Host, der den Empfang von E-Mails erwartet, das Definieren von Postfächern vermeiden sollte, in denen der lokale Teil das Quoted-String-Formular benötigt (oder verwendet)".


@WildWezyr Gültige Hostnamen, bei denen es sich um eine IP-Adresse, einen FQN oder etwas handeln kann, das für einen lokalen Netzwerkhost auflösbar ist.
Jensen starb am

Zitierte Zeichenfolgen waren für den Durchgang durch ein Gateway unerlässlich. Erinnern Sie sich an Banyan Vines?
McKenzm

13

Google macht eine interessante Sache mit ihren gmail.com-Adressen. gmail.com-Adressen erlauben nur Buchstaben (az), Zahlen und Punkte (die ignoriert werden).

Beispiel: pikachu@gmail.com ist dasselbe wie pi.kachu@gmail.com, und beide E-Mail-Adressen werden an dasselbe Postfach gesendet. PIKACHU@gmail.com wird ebenfalls an dieselbe Mailbox gesendet.

Um die Frage zu beantworten, hängt es manchmal vom Implementierer ab, wie viel von den RFC-Standards sie befolgen möchten. Der Adressstil von Google gmail.com ist mit den Standards kompatibel. Sie tun dies auf diese Weise, um Verwirrung zu vermeiden, wenn verschiedene Personen ähnliche E-Mail-Adressen verwenden, z

*** gmail.com accepting rules ***
d.oy.smith@gmail.com   (accepted)
d_oy_smith@gmail.com   (bounce and account can never be created)
doysmith@gmail.com     (accepted)
D.Oy'Smith@gmail.com   (bounce and account can never be created)

Der Wikipedia-Link ist eine gute Referenz dafür, was E-Mail-Adressen im Allgemeinen zulassen. http://en.wikipedia.org/wiki/Email_address


2
Ja, dies ist eine großartige Antwort darauf, warum Google Mail das Erstellen von E-Mails damit nicht zulässt. Sie können E-Mails {john'doe}@my.serverjedoch problemlos senden und empfangen . Auch mit hMail-Server getestet.
Piotr Kula

Sie können Ihren Kunden testen, indem Sie eine E-Mail an senden. {piotr'kula}@kula.solutionsWenn dies funktioniert, erhalten Sie eine nette automatische Antwort. Sonst passiert nichts.
Piotr Kula

3
Google Mail folgt RFC 6530 in dem Sinne, dass jede mögliche von Google Mail zugelassene E-Mail-Adresse gemäß RFC gültig ist. Google Mail beschließt lediglich, den Satz zulässiger Adressen mit zusätzlichen Regeln weiter einzuschränken und ansonsten ähnliche Adressen mit Punkten im lokalen Teil zu erstellen, optional gefolgt von "+" und alphanumerischen Zeichen.
Teemu Leisti

Google schränkt die Kriterien für die Kontoerstellung ein ... Ich kann mir vorstellen, dass die Zeichenfolge für eingehende E-Mail-Konten mit der zusätzlichen Zeichenfolge "Interpunktion" und "Nachfolgend" sowie dem vorangestellten Zeichen "Aliaszeichenfolge" gelöscht wird, damit die E-Mails an das richtige Konto weitergeleitet werden können. Kinderleicht. Auf diese Weise können Benutzer keine E-Mail-Adressen erstellen, sodass gültige Adressen häufig einfache und komplexeste Überprüfungen bestehen.
BradChesney79

Es ist nicht nur Google Mail, einige Anbieter haben "Weiterleitungsfilter", die bestimmte Zeichenfolgen in Anführungszeichen ablehnen, insbesondere "=", als wären sie Trennzeichen. Dies soll Benutzer daran hindern, Gateways einzurichten und Spam-Adressen in der privaten Zeichenfolge in Anführungszeichen zu verschachteln. "@" ist gültig, aber "= @ =" ist nicht (als) gültig.
McKenzm

12

Sie können mit dem Wikipedia-Artikel beginnen :

  • Englische Groß- und Kleinbuchstaben (az, AZ)
  • Ziffern 0 bis 9
  • Figuren ! # $% & '* + - / =? ^ _ `{| } ~
  • Charakter. (Punkt, Punkt, Punkt), vorausgesetzt, es ist nicht das erste oder letzte Zeichen, und vorausgesetzt, es erscheint nicht zwei- oder mehrmals hintereinander.

11

Name:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%&'*+-/=?^_`{|}~.

Server:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-.

4
Was ist mit <>und []? ZB "()<>[]:,;@\\\"!#$%&'-/=?^_{} | ~ .a "@ example.org`?
Kenorb

20
Bitte zitieren Sie Quellen. Ohne Quellen sieht dies nach einer Vermutung aus.
Mathieu K.

15
Dies ist veraltet und war möglicherweise nie korrekt.
Jason Harrison

9

Suchen Sie nach @ und. und senden Sie dann eine E-Mail, damit sie es überprüfen können.

Ich kann meine .name-E-Mail-Adresse immer noch nicht auf 20% der Websites im Internet verwenden, weil jemand seine E-Mail-Validierung vermasselt hat oder weil sie vor den neuen Adressen gültig ist.


9
Sogar . ist nicht unbedingt notwendig; Ich habe von mindestens einem Fall einer E-Mail-Adresse in einer Top-Level-Domain (speziell ua) gehört. Die Adresse war <Name> @ua - kein Punkt!

Dies ist so ziemlich der einfachste Weg, Ihre Validierung nicht durcheinander zu bringen, da fast alles erlaubt ist. Wenn etwas nicht erlaubt ist, werden Sie vom Server des Empfängers informiert.
Avamander

5

Die kurze Antwort ist, dass es 2 Antworten gibt. Es gibt einen Standard für das, was Sie tun sollten. dh Verhalten, das weise ist und Sie aus Ärger heraushält. Es gibt einen anderen (viel umfassenderen) Standard für das Verhalten, das Sie akzeptieren sollten, ohne Probleme zu machen. Diese Dualität funktioniert zum Senden und Akzeptieren von E-Mails, hat jedoch eine breite Anwendung im Leben.

Für eine gute Anleitung zu den von Ihnen erstellten Adressen; Siehe: http://www.remote.org/jochen/mail/info/chars.html

Um gültige E-Mails zu filtern, geben Sie einfach alles weiter, was verständlich genug ist, um einen nächsten Schritt zu sehen. Oder fangen Sie an, eine Reihe von RFCs zu lesen, Vorsicht, hier sind Drachen.


Der Link ist weg. Welcher Inhalt war da?
Ygoe

5

Eine gute Lektüre zu diesem Thema .

Auszug:

These are all valid email addresses!

"Abc\@def"@example.com
"Fred Bloggs"@example.com
"Joe\\Blow"@example.com
"Abc@def"@example.com
customer/department=shipping@example.com
\$A12345@example.com
!def!xyz%abc@example.com
_somename@example.com

1
Ich habe mich vor dem Domain-Teil über das '@' gewundert. Kann das benutzt werden?
Saiyaff Farouk

@SaiyaffFarouk gemäß der Spezifikation, ja. Die meisten Mail-Anbieter werden dies jedoch wahrscheinlich nicht als Teil ihrer eigenen Validierung
zulassen

dass Blog-Listen Joe.\\Blow@example.comohne Anführungszeichen. Ist das tatsächlich gültig? Angesichts der Antworten hier scheint es nicht klar zu sein, aber ich frage, weil ich (sehr seltene) Fälle von DNS SoA rname-E-Mail-Zeichenfolgen gesehen habe, die Backslashes enthalten.
wesinat0r

5

Die akzeptierte Antwort bezieht sich auf einen Wikipedia-Artikel, wenn der gültige lokale Teil einer E-Mail-Adresse besprochen wird, aber Wikipedia ist hierfür keine Autorität.

IETF RFC 3696 ist eine Behörde in dieser Angelegenheit und sollte in Abschnitt 3 konsultiert werden . Einschränkungen bei E-Mail-Adressen auf Seite 5:

Zeitgemäße E-Mail-Adressen bestehen aus einem "lokalen Teil", der durch ein At-Sign ("@") von einem "Domain-Teil" (einem vollqualifizierten Domain-Namen) getrennt ist. Die Syntax des Domänenteils entspricht der im vorherigen Abschnitt. Die in diesem Abschnitt genannten Bedenken hinsichtlich Filterung und Namenslisten gelten auch für die in einem E-Mail-Kontext verwendeten Domainnamen. Der Domänenname kann auch durch eine IP-Adresse in eckigen Klammern ersetzt werden. Von diesem Formular wird jedoch dringend abgeraten, außer zu Test- und Fehlerbehebungszwecken.

Der lokale Teil kann unter Verwendung der unten beschriebenen Anführungskonventionen angezeigt werden. Die zitierten Formulare werden in der Praxis selten verwendet, sind jedoch für einige legitime Zwecke erforderlich. Daher sollten sie nicht in Filterroutinen abgelehnt, sondern zur Auswertung durch den Zielhost an das E-Mail-System weitergeleitet werden.

Die genaue Regel lautet, dass jedes ASCII-Zeichen, einschließlich Steuerzeichen, in Anführungszeichen oder in Anführungszeichen gesetzt werden kann. Wenn ein Anführungszeichen erforderlich ist, wird das Backslash-Zeichen verwendet, um das folgende Zeichen in Anführungszeichen zu setzen. Zum Beispiel

  Abc\@def@example.com

ist eine gültige Form einer E-Mail-Adresse. Es können auch Leerzeichen wie in angezeigt werden

  Fred\ Bloggs@example.com

Das Backslash-Zeichen kann auch verwendet werden, um sich selbst zu zitieren, z.

  Joe.\\Blow@example.com

Zusätzlich zum Zitieren mit dem Backslash-Zeichen können herkömmliche doppelte Anführungszeichen verwendet werden, um Zeichenfolgen zu umgeben. Zum Beispiel

  "Abc@def"@example.com

  "Fred Bloggs"@example.com

sind alternative Formen der ersten beiden obigen Beispiele. Diese zitierten Formulare werden selten empfohlen und sind in der Praxis ungewöhnlich. Sie müssen jedoch, wie oben erläutert, von Anwendungen unterstützt werden, die E-Mail-Adressen verarbeiten. Insbesondere erscheinen die zitierten Formen häufig im Kontext von Adressen, die mit Übergängen von anderen Systemen und Kontexten verbunden sind; Diese Übergangsanforderungen treten immer noch auf, und da ein System, das eine vom Benutzer angegebene E-Mail-Adresse akzeptiert, nicht "wissen" kann, ob diese Adresse einem Legacy-System zugeordnet ist, müssen die Adressformulare akzeptiert und an die E-Mail-Umgebung übergeben werden.

Ohne Anführungszeichen können lokale Teile aus einer beliebigen Kombination von
alphabetischen Zeichen, Ziffern oder Sonderzeichen bestehen

  ! # $ % & ' * + - / = ?  ^ _ ` . { | } ~

Punkt (".") kann ebenfalls erscheinen, darf jedoch nicht zum Starten oder Beenden des lokalen Teils verwendet werden, und es dürfen auch nicht zwei oder mehr aufeinanderfolgende Punkte erscheinen. Anders ausgedrückt, jedes andere ASCII-Grafikzeichen (Druckzeichen) als das at-Zeichen ("@"), der Backslash, das doppelte Anführungszeichen, das Komma oder die eckigen Klammern werden möglicherweise ohne Anführungszeichen angezeigt. Wenn eines dieser Listen ausgeschlossener Zeichen angezeigt werden soll, müssen sie in Anführungszeichen gesetzt werden. Formen wie

  user+mailbox@example.com

  customer/department=shipping@example.com

  $A12345@example.com

  !def!xyz%abc@example.com

  _somename@example.com

sind gültig und werden ziemlich regelmäßig gesehen, aber alle oben aufgeführten Zeichen sind zulässig.

Wie andere habe ich einen regulären Ausdruck eingereicht, der sowohl für PHP als auch für JavaScript funktioniert, um E-Mail-Adressen zu überprüfen:

/^[a-z0-9!'#$%&*+\/=?^_`{|}~-]+(?:\.[a-z0-9!'#$%&*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-zA-Z]{2,}$/i

3

Wie in diesem Wikipedia-Link zu finden

Der lokale Teil der E-Mail-Adresse kann eines dieser ASCII-Zeichen verwenden:

  • Lateinische Groß- und Kleinbuchstaben Aan Zund abis z;

  • Ziffern 0zu 9;

  • Sonderzeichen !#$%&'*+-/=?^_`{|}~;

  • Punkt ., vorausgesetzt, es ist nicht das erste oder letzte Zeichen, sofern nicht angegeben, und vorausgesetzt, dass es nicht fortlaufend angezeigt wird, sofern nicht angegeben (z. B. John..Doe@example.comnicht zulässig, aber "John..Doe"@example.comzulässig);

  • Leerzeichen und "(),:;<>@[\]Zeichen sind mit Einschränkungen zulässig (sie sind nur innerhalb einer Zeichenfolge in Anführungszeichen zulässig, wie im folgenden Absatz beschrieben, und außerdem muss vor einem Backslash oder einem doppelten Anführungszeichen ein Backslash stehen).

  • Kommentare sind in Klammern an beiden Enden des lokalen Teils zulässig. zB john.smith(comment)@example.comund (comment)john.smith@example.comsind beide gleichbedeutend mit john.smith@example.com.

Zusätzlich zu den oben genannten ASCII-Zeichen sind internationale Zeichen über U + 007F, die als UTF-8 codiert sind, von RFC 6531 zulässig , obwohl Mailsysteme möglicherweise einschränken, welche Zeichen beim Zuweisen lokaler Teile verwendet werden sollen.

Eine Zeichenfolge in Anführungszeichen kann als durch Punkte getrennte Entität innerhalb des lokalen Teils vorhanden sein, oder sie kann vorhanden sein, wenn die äußersten Anführungszeichen die äußersten Zeichen des lokalen Teils sind (z. B. abc."defghi".xyz@example.comoder "abcdefghixyz"@example.comzulässig sind. Umgekehrt abc"defghi"xyz@example.comist dies nicht; auch nicht abc\"def\"ghi@example.com). Zitierte Zeichenfolgen und Zeichen werden jedoch nicht häufig verwendet. RFC 5321 warnt außerdem, dass "ein Host, der den Empfang von E-Mails erwartet, das Definieren von Postfächern vermeiden sollte, in denen der lokale Teil das Quoted-String-Formular benötigt (oder verwendet)".

Der lokale Teil postmasterwird speziell behandelt - er unterscheidet nicht zwischen Groß- und Kleinschreibung und sollte an den Domänen-E-Mail-Administrator weitergeleitet werden. Technisch gesehen unterscheiden alle anderen lokalen Teile zwischen Groß- und Kleinschreibung jsmith@example.comund JSmith@example.comgeben unterschiedliche Postfächer an. Viele Organisationen behandeln jedoch Groß- und Kleinbuchstaben als gleichwertig.

Trotz der Vielzahl von technisch gültigen Sonderzeichen; Organisationen, Mail-Services, Mail-Server und Mail-Clients akzeptieren in der Praxis häufig nicht alle. Beispielsweise ermöglicht Windows Live Hotmail nur die Erstellung von E-Mail-Adressen mit alphanumerischen Zeichen, Punkt ( .), Unterstrich ( _) und Bindestrich ( -). Es wird allgemein empfohlen, die Verwendung einiger Sonderzeichen zu vermeiden, um das Risiko abgelehnter E-Mails zu vermeiden.


0

Die Antwort ist (fast) ALL(7-Bit-ASCII).
Wenn die Einschlussregeln "... unter bestimmten Bedingungen" zulässig sind ... "

Wenn wir uns nur eine von mehreren möglichen Einschlussregeln für zulässigen Text im Teil "Domänentext" in RFC 5322 oben auf Seite 17 ansehen, finden wir:

dtext          =   %d33-90 /          ; Printable US-ASCII
                   %d94-126 /         ;  characters not including
                   obs-dtext          ;  "[", "]", or "\"

Die einzigen drei fehlenden Zeichen in dieser Beschreibung werden im Domänenliteral verwendet [], um ein Anführungszeichen zu bilden \, und im Leerzeichen (% d32). Damit wird der gesamte Bereich 32-126 (dezimal) verwendet. Eine ähnliche Anforderung wird als "qtext" und "ctext" angezeigt. Viele Steuerzeichen sind ebenfalls zulässig / verwendet. Eine Liste solcher Steuerzeichen wird auf Seite 31, Abschnitt 4.1 von RFC 5322 als obs-NO-WS-CTL angezeigt.

obs-NO-WS-CTL  =   %d1-8 /            ; US-ASCII control
                   %d11 /             ;  characters that do not
                   %d12 /             ;  include the carriage
                   %d14-31 /          ;  return, line feed, and
                   %d127              ;  white space characters

Alle diese Steuerzeichen sind zulässig, wie zu Beginn von Abschnitt 3.5 angegeben:

.... MAY be used, the use of US-ASCII control characters (values
     1 through 8, 11, 12, and 14 through 31) is discouraged ....

Und eine solche Einschlussregel ist daher "einfach zu weit". Oder in einem anderen Sinne ist die erwartete Regel "zu simpel".


0

Der Einfachheit halber bereinige ich die Übermittlung, indem ich vor der Validierung den gesamten Text in doppelten Anführungszeichen und den zugehörigen umgebenden doppelten Anführungszeichen entferne und den Kibosh auf E-Mail-Adressübermittlungen setze, basierend auf dem, was nicht zulässig ist. Nur weil jemand den John haben kann .. "The * $ hizzle * Bizzle" .. Doe@whatever.com Adresse bedeutet nicht, dass ich es in meinem System zulassen muss. Wir leben in der Zukunft, in der es vielleicht weniger Zeit braucht, um eine kostenlose E-Mail-Adresse zu erhalten, als einen guten Job zu machen und Ihren Hintern abzuwischen. Und es ist nicht so, dass die E-Mail-Kriterien nicht direkt neben der Eingabe verputzt sind und angeben, was erlaubt ist und was nicht.

Ich bereinige auch, was von verschiedenen RFCs ausdrücklich nicht erlaubt ist, nachdem das zitierte Material entfernt wurde. Die Liste der speziell nicht zugelassenen Zeichen und Muster scheint eine viel kürzere Liste zu sein, auf die getestet werden muss.

Nicht erlaubt:

    local part starts with a period ( .account@host.com )
    local part ends with a period   ( account.@host.com )
    two or more periods in series   ( lots..of...dots@host.com )
    &’`*|/                          ( some&thing`bad@host.com )
    more than one @                 ( which@one@host.com )
    :%                              ( mo:characters%mo:problems@host.com )

Im angegebenen Beispiel:

John.."The*$hizzle*Bizzle"..Doe@whatever.com --> John..Doe@whatever.com

John..Doe@whatever.com --> John.Doe@whatever.com

Das Senden einer bestätigten E-Mail-Nachricht an das verbleibende Ergebnis beim Versuch, die E-Mail-Adresse hinzuzufügen oder zu ändern, ist eine gute Möglichkeit, um festzustellen, ob Ihr Code die übermittelte E-Mail-Adresse verarbeiten kann. Wenn die E-Mail nach so vielen Desinfektionsrunden wie erforderlich validiert wurde, feuern Sie diese Bestätigung ab. Wenn eine Anfrage vom Bestätigungslink zurückkommt, kann die neue E-Mail aus dem Status des temporären Fegefeuers oder des Speichers verschoben werden, um eine echte, erstklassige gespeicherte E-Mail zu werden.

Eine Benachrichtigung über einen Fehler oder Erfolg bei der Änderung der E-Mail-Adresse kann an die alte E-Mail-Adresse gesendet werden, wenn Sie Rücksicht nehmen möchten. Nicht bestätigte Kontoeinstellungen können als fehlgeschlagene Versuche nach einer angemessenen Zeitspanne vollständig aus dem System herausfallen.

Ich erlaube keine Stinkhole-E-Mails auf meinem System, vielleicht wirft das nur Geld weg. In 99,9% der Fälle tun die Benutzer jedoch einfach das Richtige und haben eine E-Mail, die die Konformitätsgrenzen mithilfe von Edge-Case-Kompatibilitätsszenarien nicht an den Rand drängt. Achten Sie auf reguläres DDoS. Dies ist ein Ort, an dem Sie in Schwierigkeiten geraten können. Und dies hängt mit der dritten Sache zusammen, die ich mache: Ich beschränke, wie lange ich bereit bin, eine E-Mail zu verarbeiten. Wenn es meinen Computer verlangsamen muss, um validiert zu werden, kommt es nicht über die Endpunktlogik meiner eingehenden Daten-API hinaus.

Bearbeiten: Diese Antwort wurde immer wieder als "schlecht" eingestuft, und vielleicht hat sie es verdient. Vielleicht ist es immer noch schlecht, vielleicht auch nicht.


2
Ich denke, diese Antwort wird abgelehnt, weil dies eine Meinung ist und die Frage tatsächlich nicht beantwortet. Außerdem erhalten Benutzer, deren E-Mail-Adresse stillschweigend bereinigt wird, niemals E-Mails von Ihnen. Sie sollten sie besser darüber informieren, dass ihre E-Mail-Adresse nicht akzeptiert wird.
Vcarel

2
Ich vermute, die Abstimmungen sind, weil es hier zu viele Ideen gibt. Der nicht zugelassenen Liste sollten, obwohl dies nützliche Komponententests sind, vorangestellt werden, was zulässig ist. Der Programmieransatz scheint relativ in Ordnung zu sein, würde aber wahrscheinlich besser passen, nachdem Sie die Spezifikationen aufgelistet haben, mit denen Sie arbeiten, usw. Abschnitte und eine milde Bearbeitung von Texten würden helfen. Nur meine 2 Cent.
HoldOffHunger

@vcarel - Oh, absolut. Die Validierung auf der Benutzerseite des Front-End würde sie darüber informieren, gegen welche Regeln (im Tooltip verfügbar) sie verstoßen haben. Sie haben Recht - es ist eine allgemeine Meinung. Die obige Frage stammt jedoch von jemandem, der X mit Sicherheit eine Y-Frage stellt. Dies ist eine Anleitung und es funktioniert ... es funktioniert nicht nur, es funktioniert auch gut. Ich lasse keine Bullshit-E-Mail-Adressen in meinen Systemen zu, in denen ich die Entscheidungen treffe.
BradChesney79

@HoldOffHunger Ich kann sehen, dass die Gesamtidee nicht so kohärent ausgedrückt wird, wie sie sein könnte. Ich kann sie an einem anderen Tag überarbeiten, an dem ich mehr Zeit habe, dies besser auszudrücken. Danke für den Einblick.
BradChesney79

-1

In meinem PHP verwende ich diesen Check

<?php
if (preg_match(
'/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/',
"tim'qqq@gmail.com"        
)){
    echo "legit email";
} else {
    echo "NOT legit email";
}
?>

Probieren Sie es selbst aus http://phpfiddle.org/main/code/9av6-d10r


-1

Ich habe diesen regulären Ausdruck gemäß den RFC-Richtlinien erstellt:

^[\\w\\.\\!_\\%#\\$\\&\\'=\\?\\*\\+\\-\\/\\^\\`\\{\\|\\}\\~]+@(?:\\w+\\.(?:\\w+\\-?)*)+$

1
Diese Version verbessert den regulären Ausdruck, indem die Länge der Domain / Subdomains überprüft wird. Genießen! ^ [\\ w \\. \\! _ \\% # \\ $ \\ & \\ '= \\? \ * \\ + \\ - \\ / \\ ^ \ `\\ {\\ | \\} \\ ~] + @ (?: [\\ w] (?: [\\ w \\ -] {0,61} [\\ w])? (?: \\. [\\ w] (?: [\\ w \\ -] {0,61} [\\ w])?) *) $
Mau

-2

Google Mail erlaubt nur das + -Zeichen als Sonderzeichen und in einigen Fällen (.), Andere Sonderzeichen sind bei Google Mail jedoch nicht zulässig. Laut RFC können Sie Sonderzeichen verwenden, Sie sollten jedoch vermeiden, E-Mails mit Sonderzeichen an Google Mail zu senden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.