Ich frage nicht nach einer vollständigen E-Mail-Validierung.
Ich möchte nur wissen, welche Zeichen user-name
und server
Teile 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@server
frage nur nach dieser einfachen Form: (zB [email protected]) und erlaubten Zeichen in beiden Teilen.
forms
email
email-validation
email-address
WildWezyr
quelle
quelle
+
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."hello world"@example.com
ist gültig.Antworten:
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:
Und wie immer hat Wikipedia einen anständigen Artikel über E-Mail-Adressen :
Zusätzlich zu den ASCII-Zeichen können Sie ab 2012 die oben genannten internationalen Zeichen verwenden
U+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
domain
Teil ist wie folgt definiert :quelle
[email protected]
handelt sich nicht um eine gültige E-Mail-Adresse,[email protected]
obwohl beide dieselben Zeichen verwenden.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.
quelle
Das Format der E-Mail-Adresse lautet:
local-part@domain-part
(max. 64 @ 255 Zeichen, insgesamt nicht mehr 256).Die
local-part
unddomain-part
kö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:
abcdefghijklmnopqrstuvwxyz
,ABCDEFGHIJKLMNOPQRSTUVWXYZ
,0123456789
,!#$%&'*+-/=?^_`{|}~
,.
(nicht erstes oder letztes Zeichen oder wiederholt, sofern nicht anders angegeben),"(),:;<>@[\]
(mit einigen Einschränkungen),()
(sind in Klammern erlaubt, zB(comment)[email protected]
).Domain-Teil:
abcdefghijklmnopqrstuvwxyz
,ABCDEFGHIJKLMNOPQRSTUVWXYZ
,0123456789
,-
(nicht erstes oder letztes Zeichen),jsmith@[192.168.2.1]
oderjsmith@[IPv6:2001:db8::1]
.Diese E-Mail-Adressen sind gültig:
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
(lokaler Teil mit einem Buchstaben)"much.more unusual"@example.com
"[email protected]"@example.com
"very.(),:;<>[]\".VERY.\"very@\ \"very\".unusual"@strange.example.com
[email protected]
admin@mailserver1
(lokaler Domainname ohne Top-Level-Domain)#!$%&'*+-/=?^_`{}|[email protected]
"()<>[]:,;@\\"!#$%&'-/=?^_`{}| ~.a"@example.org
" "@example.org
(Leerzeichen zwischen den Anführungszeichen)example@localhost
(gesendet von localhost)[email protected]
(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@[email protected]
(nur eines@
ist außerhalb von Anführungszeichen erlaubt)a"b(c)d,e:f;gi[j\k][email protected]
(Keines der Sonderzeichen in diesem lokalen Teil darf außerhalb von Anführungszeichen stehen.)just"not"[email protected]
(Zeichenfolgen in Anführungszeichen müssen durch Punkte getrennt sein oder das einzige Element, aus dem der lokale Teil besteht.)this is"not\[email protected]
(Leerzeichen, Anführungszeichen und Backslashes dürfen nur in Zeichenfolgen in Anführungszeichen und vor einem Backslash vorhanden sein.)this\ still\"not\[email protected]
(Auch wenn Escapezeichen (vorangestellt von einem Backslash) stehen, müssen Leerzeichen, Anführungszeichen und Backslashes immer noch in Anführungszeichen enthalten sein.)[email protected]
(doppelter Punkt vorher@
); (mit Vorbehalt: Google Mail lässt dies durch)[email protected]
(doppelter Punkt nach@
)Quelle: E-Mail-Adresse bei Wikipedia
Perls RFC2822-Regex zum Überprüfen von E-Mails:
Siehe auch: RFC 822 Email Address Parser in PHP .
Die formalen Definitionen von E-Mail-Adressen finden Sie in:
Verbunden:
quelle
[email protected]
und nennen Sie es einen Tag.Wikipedia hat einen guten Artikel dazu , und die offizielle Spezifikation ist hier . Aus Wikipdia:
quelle
Google macht eine interessante Sache mit ihren gmail.com-Adressen. gmail.com-Adressen erlauben nur Buchstaben (az), Zahlen und Punkte (die ignoriert werden).
Beispiel: [email protected] ist dasselbe wie [email protected], und beide E-Mail-Adressen werden an dasselbe Postfach gesendet. [email protected] 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
Der Wikipedia-Link ist eine gute Referenz dafür, was E-Mail-Adressen im Allgemeinen zulassen. http://en.wikipedia.org/wiki/Email_address
quelle
{john'doe}@my.server
jedoch problemlos senden und empfangen . Auch mit hMail-Server getestet.{piotr'kula}@kula.solutions
Wenn dies funktioniert, erhalten Sie eine nette automatische Antwort. Sonst passiert nichts.Sie können mit dem Wikipedia-Artikel beginnen :
quelle
Name:
Server:
quelle
<>
und[]
? ZB"()<>[]:,;@\\\"!#$%&'-/=?^_
{} | ~ .a "@ example.org`?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.
quelle
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.
quelle
Eine gute Lektüre zu diesem Thema .
Auszug:
quelle
Joe.\\[email protected]
ohne 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.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:
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:
quelle
Wie in diesem Wikipedia-Link zu finden
quelle
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:
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.
Alle diese Steuerzeichen sind zulässig, wie zu Beginn von Abschnitt 3.5 angegeben:
Und eine solche Einschlussregel ist daher "einfach zu weit". Oder in einem anderen Sinne ist die erwartete Regel "zu simpel".
quelle
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" .. [email protected] 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:
Im angegebenen Beispiel:
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.
quelle
In meinem PHP verwende ich diesen Check
Probieren Sie es selbst aus http://phpfiddle.org/main/code/9av6-d10r
quelle
Ich habe diesen regulären Ausdruck gemäß den RFC-Richtlinien erstellt:
quelle
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.
quelle