Wie weit sollte man mit der Überprüfung der E-Mail-Adresse gehen?


101

Ich frage mich, wie weit die Validierung der E-Mail-Adresse gehen soll. Mein Fachgebiet ist in erster Linie die Webentwicklung, dies gilt jedoch überall.

Ich habe ein paar Ansätze gesehen:

  • einfach prüfen, ob ein "@" vorhanden ist, was absolut einfach, aber natürlich nicht so zuverlässig ist.
  • Ein komplexerer Regex-Test für Standard-E-Mail-Formate
  • Ein vollständiger regulärer Ausdruck gegen RFC 2822 - das Problem dabei ist, dass oft eine E-Mail-Adresse gültig ist, aber wahrscheinlich nicht das, was der Benutzer gemeint hat
  • DNS-Validierung
  • SMTP-Validierung

Wie viele Leute vielleicht wissen (aber viele nicht), können E-Mail-Adressen viele seltsame Variationen aufweisen, die die meisten Leute normalerweise nicht berücksichtigen (siehe RFC 2822 3.4.1 ), aber Sie müssen über die Ziele von nachdenken Ihre Validierung: Versuchen Sie lediglich sicherzustellen, dass eine E-Mail-Nachricht an eine Adresse gesendet werden kann oder dass der Benutzer diese Adresse wahrscheinlich eingeben wollte (was in vielen unklareren Fällen, in denen dies nicht der Fall ist, unwahrscheinlich ist) 'Adressen).

Eine Option, die ich in Betracht gezogen habe, besteht darin, einfach eine Warnung mit einer esoterischeren Adresse zu geben und dennoch zuzulassen, dass die Anforderung bearbeitet wird. Dies erhöht jedoch die Komplexität eines Formulars, und die meisten Benutzer sind wahrscheinlich verwirrt.

Während die DNS-Validierung / SMTP-Validierung ein Kinderspiel zu sein scheint, sehe ich Probleme, wenn der DNS-Server / SMTP-Server vorübergehend außer Betrieb ist und ein Benutzer sich nicht registrieren kann oder der SMTP-Server des Benutzers die erforderlichen Funktionen nicht unterstützt.

Wie könnten einige erfahrene Entwickler hier draußen damit umgehen? Gibt es andere Ansätze als die, die ich aufgelistet habe?

Edit: Ich habe das offensichtlichste von allen völlig vergessen, indem ich eine Bestätigungs-E-Mail geschickt habe! Vielen Dank an die Antwortenden für den Hinweis. Ja, dies ist ziemlich narrensicher, aber es erfordert zusätzlichen Aufwand seitens aller Beteiligten. Der Benutzer muss eine E-Mail abrufen und der Entwickler muss sich die Benutzerdaten merken, bevor sie überhaupt als gültig bestätigt werden.


Persönlich würde ich die doppelte Regex-Strategie Warnen und Zurückweisen verwenden, gefolgt von einer E-Mail, um den Besitz der Adresse zu bestätigen.
James Snell

Die große Frage ist, welchen Zweck Sie für die Adresse fragen. Wenn Sie beispielsweise eine Bestätigungs-E-Mail an den Benutzer senden, sollte eine sehr einfache Überprüfung ausreichen, da der Benutzer vermutlich motiviert ist, eine gültige Adresse anzugeben.
SDsolar

Antworten:


80

Es gibt keine 100% zuverlässige Möglichkeit, eine gültige E-Mail-Adresse zu bestätigen, außer eine E-Mail an den Benutzer zu senden und auf eine Antwort zu warten, wie es in den meisten Foren der Fall ist.

Ich würde mit der einfachen "@" Validierungsregel fortfahren und dem Benutzer dann eine E-Mail senden, um seine E-Mail-Adresse zu bestätigen.

Obwohl dies meine persönliche Meinung ist ... Ich erwarte andere Vorschläge.


6
Stimme voll und ganz zu. Entweder interessiert Sie diese Adresse wirklich , oder Sie tun es nicht. Ich sehe keinen Grund für eine halbe Fürsorge.
Benjol

3
Mit Abstand die beste Antwort. Bestätigen Sie das @ und bestätigen Sie die Adresse (mit einer E-Mail) - ein subtiler Unterschied.
billy.bob

... deshalb machen das die meisten Foren.
Dan Ray

Ich stimme @Billy Bob zu, dass eine einfache Überprüfung, gefolgt von einer Bestätigungs-E-Mail, der effektivste Weg ist, um die Richtigkeit der E-Mail zu beweisen.
SDsolar

Eine „gültige“ E-Mail-Adresse geht möglicherweise auch an die falsche Person, sodass eine Bestätigungs-E-Mail wirklich der einzige Weg ist, um sicherzugehen. Ich bekomme jedes Jahr ein paar davon, wenn jemand seine eigene E-Mail-Adresse falsch eingibt.
Axl

57

Ein Vorschlag: lehnen Sie Adressen mit einem + nicht ab. Es ist ärgerlich, sie abzulehnen, aber es ist ein gültiges Zeichen, und Google Mail-Benutzer können address+label@gmail.com verwenden, um eingehende E-Mails einfacher zu kennzeichnen und zu sortieren.


8
+1 !!! Es scheint unmöglich, ausgerechnet E-Mails von Facebook zu filtern!
Juni

Kann ohne das filtern - nur Benutzer die Absenderinformationen
Casebash

1
GMail hat es von anderen Mailservern abgeholt. Ich glaube, dass qmail und postfix es popularisiert haben.

23
Obwohl ich dem Gefühl zustimme, beginnt dies nicht einmal, die Frage zu beantworten.
Bryan Oakley

29

In Ihrem Beitrag scheint es so zu sein, dass Sie mit "SMTP-Validierung" eine Verbindung zum Server herstellen und versuchen, mit einem RCPT-TO zu prüfen, ob es akzeptiert wird. Da Sie sich vom tatsächlichen Senden einer Bestätigungs-E-Mail unterscheiden, gehe ich davon aus, dass Sie dies in Übereinstimmung mit den Benutzeraktionen tun möchten. Zusätzlich zu Problemen wie Netzwerkproblemen, DNS-Fehlern usw. kann die graue Auflistung bei dieser Methode Chaos anrichten. Die Methoden variieren, aber die im Wesentlichen graue Auflistung verzögert immer den ersten Versuch, dem Empfänger per Verbindungs-IP zuzustellen. Wie gesagt, dies kann variieren, einige Hosts lehnen möglicherweise beim ersten Versuch ungültige Adressen ab und verschieben nur gültige Adressen, aber es gibt keine zuverlässige Möglichkeit, die verschiedenen Implementierungen programmgesteuert zu sortieren.

Der einzige Weg, wie Sie jemals sicher sein können, dass eine Adresse gültig ist und von ihrem Eigentümer übermittelt wird, der sie wirklich für Ihre Bewerbung verwenden möchte, ist das Senden einer Bestätigungs-E-Mail. Nun, solange es nicht durch Spam gefiltert wird, denke ich =).


25

Eine weitere Schwäche der Verwendung eines regulären Ausdrucks für die E-Mail-Validierung besteht darin, dass es fast unmöglich ist, alle gültigen Domänen der obersten Ebene zu erfassen und alle ungültigen abzulehnen.

Zum Beispiel der grundlegende E-Mail-Ausdruck in Jeff Atwoods Antwort:

\ b [A-Z0-9 ._% + -] + @ [A-Z0-9 .-] +. [AZ] {2,4} \ b

akzeptiert jede TLD mit zwei bis vier Zeichen. So wird beispielsweise .spam akzeptiert, aber .museum und .travel (beide gültige TLDs) werden abgelehnt.

Nur ein weiterer Grund, warum es besser ist, einfach nach dem @ zu suchen und eine Bestätigungs-E-Mail zu senden.


24

Mit internationalen Domainnamen ist fast alles möglich:

  • Håkan.Söderström@malmö.se
  • punnycode@XN--0ZWM56D.XN--HGBK6AJ7F53BBA
  • 试 @ 例子. 测试 .مثال.آزمایشی

Wenn Sie Tests durchführen möchten, sollten Sie diese zuerst in Punycode konvertieren.

Ohne Punycode müssen Sie das nur testen:

  • ist mindestens ein @
  • ist mindestens ein Zeichen im lokalen Teil
  • ist mindestens ein Punkt im Domain-Teil
  • besteht aus mindestens vier Zeichen in der Domäne (vorausgesetzt, dass niemand eine Adresse bei tld hat und die tld mindestens zwei Zeichen enthält)
function isEmail(address) {
    var pos = address.lastIndexOf("@");
    return pos > 0 && (address.lastIndexOf(".") > pos) && (address.length - pos > 4);
}

1
Wenn Sie Javascript verwenden möchten, um in Punycode zu konvertieren, können Sie den Code in der folgenden Antwort verwenden: stackoverflow.com/questions/183485/…

Richtig, dann ist das @ -Zeichen möglicherweise die einzige Möglichkeit, um sicherzustellen, dass es wie eine E-Mail-Adresse aussieht.
SDsolar

19

Am besten suchen Sie einfach nach einfachen Dingen wie @ und. in JavaScript und senden Sie ihnen dann tatsächlich eine Bestätigung an ihre E-Mail. Wenn sie ihr Konto bestätigen, haben Sie selbst eine gültige E-Mail-Adresse. Auf diese Weise wissen Sie, dass Sie eine funktionierende Adresse haben und dass Sie in der Form nicht zu dominant sein müssen.


Dies ist eine großartige Lösung. Hier ist ein regulärer Ausdruck, um nach einem @ gefolgt von einem Punkt zu suchen:/.+@.+\..+/
Evan Moran

11

Verwenden Sie einen Open-Source-Validator, der keine falschen Negative liefert. Kein Aufwand für Sie und zuverlässige Validierung für Ihre App.

Ich habe jetzt Testfälle von Cal Henderson, Dave Child, Phil Haack, Doug Lovell und RFC 3696 zusammengestellt. Insgesamt 158 ​​Testadressen.

Ich habe all diese Tests mit allen Validatoren durchgeführt, die ich finden konnte. Der Vergleich ist hier: http://www.dominicsayers.com/isemail

Ich werde versuchen, diese Seite auf dem neuesten Stand zu halten, da die Nutzer ihre Validatoren verbessern. Vielen Dank an Cal, Dave und Phil für ihre Hilfe und Zusammenarbeit bei der Zusammenstellung dieser Tests und für die konstruktive Kritik an meinem eigenen Prüfer .

Insbesondere die Errata gegen RFC 3696 sollten bekannt sein . Drei der kanonischen Beispiele sind in der Tat ungültige Adressen. Die maximale Länge einer Adresse beträgt 254 oder 256 Zeichen, nicht 320.


Link zum Vergleich ist down :(
Zero3

10

In Anbetracht der Antworten (da ich Bestätigungs-E-Mails völlig vergessen habe) scheint es mir ein geeigneter Kompromiss für eine reibungslose Lösung zu sein:

  1. Verwenden Sie reguläre Ausdrücke, um zu überprüfen, ob die E-Mail-Adresse gültig ist, und geben Sie eine Warnung aus, wenn sie unklarer ist. Vermeiden Sie jedoch, sie sofort abzulehnen.
  2. Verwenden Sie die SMTP-Überprüfung, um sicherzustellen, dass die E-Mail-Adresse gültig ist.
  3. Wenn die SMTP-Überprüfung fehlschlägt, verwenden Sie - und nur dann - eine Bestätigungs-E-Mail als letzten Ausweg. Bestätigungs-E-Mails erfordern anscheinend zu viel Interaktion außerhalb Ihrer Anwendung, um als reibungslos zu gelten, aber sie sind ein perfekter Fallback.

1
Wie können Sie überprüfen, ob ein Benutzer die E-Mail-Adresse besitzt, ohne eine Bestätigung zu senden? Nehmen wir zum Beispiel an, sie haben Ihre E-Mail-Adresse eingegeben. Würden Sie sich nicht darüber ärgern, dass der Entwickler entschieden hat, keine Bestätigungs-E-Mail bereitzustellen, und daher jedem, der Ihre Adresse kennt, erlaubt, Sie auf seiner Website anzumelden?
Rupert Madden-Abbott

1
SMTP-Validierung? Fragen Sie den Server, ob die Adresse existiert? Spam hat das schon vor langer Zeit beseitigt.

6

RegexBuddy bietet die folgenden E-Mail-bezogenen regulären Ausdrücke aus seiner Bibliothek an:

E-Mail-Adresse (Grundkenntnisse)

\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b

E-Mail-Adresse (RFC 2822, vereinfacht)

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

Aber ich stimme den Antworten von Peter und SuperJoe eher zu. Das einzige echte "Testen" ist das Senden einer Validierungs-E-Mail.


1
Ihr grundlegender E-Mail-Check schlägt bei Dingen wie fehl bob@mydivision.mycompany.com. Sie sollten auch sagen, dass keine Übereinstimmung zwischen Groß- und Kleinschreibung erforderlich ist, da Sie nur ASCII in Großbuchstaben verwenden.
unpythonic

Warum Großbuchstaben (mit dem zweiten regulären Ausdruck) ablehnen? Sollte die Validierung des lokalen Teils nicht bis zum empfangenden MTA erfolgen? Mit Ausnahme von Leerzeichen und Anführungszeichen.
Dirk Jäckel

@dirk Wie als Markierung angegeben, würden Sie beim Ausführen dieses Regex das Flag "Nicht zwischen Groß- und Kleinschreibung beachten" auf diesen Regex anwenden.
Jeff Atwood

Das grundlegende ist nicht gut, da es mehrere TLD> 4 Zeichen gibt. Ich würde es nur schaffen, min 2, no max{2,}
EkriirkE

4

Ich habe in 4 verschiedenen Unternehmen gearbeitet, in denen jemand am Helpdesk von jemandem namens O'Malley oder O'Brien oder einer anderen E-Mail-Adresse mit einem Apostroph angeschrien wurde. Wie bereits erwähnt, fangen nicht alle regulären Ausdrücke alles ab, sondern ersparen sich Ärger und akzeptieren einen Apostroph, ohne eine Warnung zu generieren.

-
bmb


Und so ist es. Gleiches gilt übrigens für das Hash-Zeichen (#).
Tomalak,

2
Nur weil die Namen der Personen keine Rautezeichen enthalten, bedeutet dies nicht, dass sie in E-Mail-Adressen nicht gültig sind.
Dave Sherohman


3

Wenn Sie eine E-Mail verifizieren möchten (dh sicherstellen, dass der Benutzer die E-Mail-Adresse besitzt), können Sie nur eine Bestätigungs-E-Mail senden. Andererseits haben viele Leute dedizierte Spam-Adressen oder nutzen Dienste wie OneWayMail, und wenn sie Ihnen ihre tatsächliche E-Mail-Adresse nicht mitteilen möchten, werden sie dies nicht tun. Sie verursachen also im Grunde genommen ein Benutzerhindernis.

Wenn es um die Validierung geht , um sicherzustellen, dass der Benutzer nicht versehentlich eine falsche E-Mail-Adresse eingibt, ist dies definitiv die richtige Motivation. Zumindest für HTML-Formulare (die bei weitem die häufigste Methode zum Sammeln von E-Mail-Adressen sind) ist dies jedoch kaum das richtige Instrument.

Zum einen können Sie Tippfehler in den tatsächlichen "Wörtern" der E-Mail-Adresse nicht erkennen. Sie haben keine Möglichkeit herauszufinden, dass dies back2dso@example.comfalsch ist, nur basierend auf dem Format.
Noch wichtiger ist jedoch, dass es aus Benutzersicht nur eine (oder eine Hand voll) E-Mail-Adressen gibt, die Sie möglicherweise eingeben möchten. Und Sie haben es wahrscheinlich schon eingegeben.
Anstatt zu versuchen, eine Adresse zu validieren, sollten Sie sich darauf konzentrieren, dass alle Browser das E-Mail-Feld erkennen und die E-Mail-Adresse nicht erst eingeben müssen. Dies gilt natürlich nicht, wenn Sie eine Site erstellen, die wahrscheinlich von Benutzern aufgerufen wird, die ihre E-Mail-Adresse noch nie in ihren Browser eingegeben haben. Aber ich nehme an, die wenigsten von uns sind in einer solchen Position.


2

Ich denke, es hängt davon ab, für welchen Kontext Sie die E-Mail verwenden. Ernstere Projekte erfordern eine strengere Validierung, aber ich denke für die meisten Dinge wird das Senden einer E-Mail an die angegebene Adresse mit einem Bestätigungslink sicherstellen, dass die E-Mail-Adresse gültig ist.


2

@ Mike - Ich denke, dass ein Teil des Grundes für das Versenden von Bestätigungs-E-Mails nicht nur darin besteht, sicherzustellen, dass die E-Mail-Adresse gültig ist, sondern dass der Benutzer, der sie gesendet hat, darauf zugreifen kann. Eine Person könnte leicht einen Tippfehler in die E-Mail-Adresse eingeben, der zu einer anderen, gültigen E-Mail-Adresse führen würde, aber das wäre immer noch ein Fehler, da es die falsche Adresse wäre.


2

Der vollständigste und genaueste reguläre Ausdruck, den ich je für die E-Mail-Validierung gesehen habe, ist der hier dokumentierte . Es ist nichts für schwache Nerven. Es ist so kompliziert, dass es in Teile zerlegt ist, um das Parsen für Menschen zu vereinfachen (Beispielcode ist in Java). Aber in Fällen, in denen es sich lohnt, die Validierung vollständig durchzuführen, wird es meiner Meinung nach nicht viel besser.

In jedem Fall würde ich vorschlagen, dass Sie Unit-Tests verwenden, um zu bestätigen, dass Ihr Ausdruck die Fälle abdeckt, die Sie für wichtig halten. Auf diese Weise können Sie sicher sein, dass Sie noch keinen Fall geklärt haben, der zuvor funktioniert hat.


2

Was auch immer Sie sich entscheiden, ich glaube , Sie auf der Seite irren müssen , zu glauben , dass 99% der Zeit, der Benutzer nicht wirklich wissen , was ihre E - Mail - Adresse ist. Als jemand aus Australien finde ich immer noch gelegentlich eine ach so clevere E-Mail-Überprüfung, die mir sagt, dass ich möglicherweise keine .com.au-Domain haben kann. In den Anfängen des Internets passierte das viel häufiger.

Das Senden einer Bestätigungs-E-Mail in diesen Tagen ist für Benutzer akzeptabel und auch nützlich, um sich anzumelden und ihre angegebene Adresse zu bestätigen.


2

Auf einigen Websites, die an Orten entwickelt wurden, an denen ich gearbeitet habe, haben wir immer Bestätigungs-E-Mails verwendet. Es war jedoch überraschend häufig, dass die Benutzer ihre E-Mail-Adresse auf eine Weise falsch eingaben, die möglicherweise nicht funktioniert hätte, und dann weiter auf die Bestätigungs-E-Mail warteten, die nicht kommen würde. Das Hinzufügen von Ad-hoc-Code (oder für den Domain-Namensteil die DNS-Überprüfung), um den Benutzer in diesen Fällen zu warnen, könnte eine gute Idee sein.

Die häufigsten Fälle, die ich gesehen habe:

  • Schreiben Sie einen Buchstaben in die Mitte des Domainnamens oder mehrere andere einfache Tippfehler.
  • TLD-Verwirrung (z. B. Hinzufügen von .brzu einer .comDomain oder Löschen .brvon von einer .com.brDomain).
  • Hinzufügen eines www.am Anfang des lokalen Teils einer E-Mail-Adresse (Ich mache das nicht nach; ich habe mehrere E-Mail-Adressen des Formulars gesehen www.username@example.com).

Es gab noch bizarrere Fälle; Dinge wie ein vollständiger Domainname als lokaler Teil, Adressen mit zwei @(so etwas wie username@domain.tld@example.com) und so weiter.

Natürlich waren die meisten von ihnen noch gültige RFC-822-Adressen, so dass Sie technisch nur den MTA mit ihnen befassen konnten. Es kann jedoch hilfreich sein, den Benutzer zu warnen, dass die eingegebene E-Mail-Adresse möglicherweise falsch ist, insbesondere wenn Ihre Zielgruppe nicht sehr gut mit Computern umgehen kann.


Hört sich so an, als ob das Problem bei diesen Websites darin bestand, dass Benutzer gezwungen waren, Informationen einzugeben, die sie wirklich nicht verstanden hatten. Nicht für alle Websites ist ein E-Mail-Kontakt mit den Benutzern erforderlich, auch wenn dies die Website entlasten würde.
bzlm

2

Die gesamte weltweite Regex-Validierung wird niemanden daran hindern, eine falsche oder gefälschte E-Mail-Adresse einzugeben. Es ist wirklich nur nervig.


Haben Sie schon einmal das DeBounce Email Validation Tool ausprobiert ? Ich schlage vor, einen Blick auf diesen Service zu werfen.
Iman Hejazi

2

Kommt auf das Ziel an. Wenn Sie ein ISP sind und überprüfen müssen, ob Benutzer gültige E-Mail-Adressen erstellen, entscheiden Sie sich für den Regex, der gegen alles Mögliche überprüft. Wenn Sie nur Benutzerfehler abfangen möchten, wie wäre es mit dem folgenden Muster:

[Alle Zeichen, keine Leerzeichen] @ [Buchstaben und Zahlen] (. [Buchstaben und Zahlen]), wobei die letzte Gruppe mindestens einmal erscheint.

Die RegEx dafür würde ungefähr so ​​aussehen:

[\S]+@[\w]+(.[\w-]+)+

Und dann senden Sie eine Bestätigungs-E-Mail, um sicher zu sein.


2
Es liegt ein Tippfehler vor (es sei denn, Sie möchten nur "w" als TLD zulassen), und es werden keine Domänen mit einem Bindestrich (-) zugeordnet. Das funktioniert besser: [\ S] + @ [\ w -] + ([\ w -] +.) +

1

@ Yaakov (könnte mit einer Art 'Antworten' hier antworten)

Ich denke, dass ein Teil des Grundes, warum Bestätigungs-E-Mails gesendet werden, nicht nur darin besteht, sicherzustellen, dass die E-Mail-Adresse gültig ist, sondern dass der Benutzer, der sie gesendet hat, darauf zugreifen kann. Eine Person könnte leicht einen Tippfehler in die E-Mail-Adresse eingeben, der zu einer anderen, gültigen E-Mail-Adresse führen würde, aber das wäre immer noch ein Fehler, da es die falsche Adresse wäre.

Ich stimme zu, aber ich bin mir nicht sicher, ob es sich lohnt. Zu diesem Zweck haben wir auch Bestätigungsfelder (die Ihre E-Mail-Adresse erneut wiederholen). Eine andere Situation, in der die Art des Standorts möglicherweise andere Ansätze erfordert.

Darüber hinaus kann der ursprüngliche Benutzer durch das Senden einer Bestätigungs-E-Mail selbst nicht darauf hingewiesen werden, dass die von ihm eingegebene Adresse falsch war. Nachdem sie die Bestätigungs-E-Mail nicht erhalten haben, gehen sie möglicherweise nur davon aus, dass Ihre App / Site fehlerhaft ist. Zumindest wenn der Benutzer die sofortige Nutzung seines Kontos zulässt, kann er seine E-Mail-Adresse korrigieren, insbesondere wenn sie an einer angemessenen Stelle angezeigt wird.


1

Pferde für Kurse.

All dies sind gültige, vollständige E-Mail-Überprüfungssysteme für sich und für eine bestimmte Website ist eines geeigneter (oder so gut wie gewährleistet) als die anderen. In vielen Fällen können mehrere Überprüfungsschritte hilfreich sein.

Wenn Sie eine Website für eine Bank entwickeln, möchten Sie zusätzlich eine Bestätigung per Post oder Telefon.

Wenn Sie eine Website für einen Wettbewerb entwickeln, möchten Sie möglicherweise keine von ihnen - überprüfen Sie die E-Mails in der Nachbearbeitung, und wenn eine fehlschlägt, ist sie für die Person, die sie eingegeben hat, zu schlecht - Sie schätzen möglicherweise die Serverleistung angesichts einer großen Menschenmenge ( Fernsehwettbewerb zum Beispiel, um sicherzustellen, dass alle richtig inline validiert werden.

Wie weit sollte man eine E-Mail-Bestätigung nehmen?

Soweit erforderlich und gerechtfertigt.

Und nicht weiter (KISS)


1

Ich habe Seiten gesehen, die auch vor Leuten schützen , die temporäre Spam-Bucket-Sites wie Mailinator oder MyTrashMail verwenden , die die Bestätigungs-E-Mail-Sache umgehen . Ich sage nicht, dass Sie diese herausfiltern sollten, ich sage nur.


Inwiefern "umgeht" es die E-Mail-Bestätigung? Sowohl Mailinator als auch MyTrashMail akzeptieren nachfolgende E-Mails an dieselbe Adresse. Wenn sich der Benutzer nicht darum kümmert, sie zu überprüfen, ist das eine andere Geschichte.
bzlm

1

Was versuchen Sie in Ihrer E-Mail-Validierung zu erfassen?

Durch eine erneute Überprüfung der E-Mail-Adressen kann bestenfalls überprüft werden, ob die Adresse syntaktisch korrekt und relativ plausibel ist. Es besteht auch die Gefahr (wie bereits oft erwähnt), tatsächliche, zu liefernde Adressen möglicherweise abzulehnen, wenn der reguläre Ausdruck nicht ganz korrekt ist.

Durch die SMTP-Überprüfung kann festgestellt werden, dass die Adresse zugestellt werden kann. Dies unterliegt den Einschränkungen von Greylisting oder Servern, die so konfiguriert sind, dass sie so wenig Informationen wie möglich über ihre Benutzer bereitstellen. Sie können nicht wissen, ob der MTA behauptet hat, Mail nur für eine gefälschte Adresse zu akzeptieren, und sie dann einfach als Teil einer Anti-Spam-Strategie auf den Boden fallen gelassen hat.

Das Senden einer Bestätigungsnachricht ist jedoch die einzige Möglichkeit, um zu überprüfen, ob eine Adresse dem Benutzer gehört, der sie eingegeben hat. Wenn ich Ihr Formular ausfülle, kann ich Ihnen ganz einfach sagen, dass meine E-Mail-Adresse ist president@whitehouse.gov. Ein regulärer Ausdruck teilt Ihnen mit, dass er syntaktisch gültig ist, ein SMTP-RCPT-TO teilt Ihnen mit, dass es sich um eine zustellbare Adresse handelt, aber meine Adresse ist es verdammt noch mal nicht .


1

Mit dem Erscheinen von HTML5 wurde den Möglichkeiten mindestens ein neuer Ansatz hinzugefügt: die Verwendung der Eingabe vom Typ " E - Mail ", die eine Validierung auf der Clientseite ermöglicht. Aktuelle Versionen von Firefox, Chrome, Safari und Opera unterstützen dies (und andere Browser behandeln es einfach wie type = text, sodass es problemlos verwendet werden kann, obwohl Sie natürlich keine Validierung haben.)

Es kann niemals (wie bereits einige Male erwähnt) eine funktionsfähige Adresse garantieren, kann jedoch von großem Vorteil sein (und schließlich die serverseitige Überprüfung ersetzen), wenn Sie nur mögliche Benutzerfehler abfangen müssen.


Die Firefox-Implementierung für das <input type="email">HTMLElement: dxr.mozilla.org/mozilla-central/source/dom/html/…
tiffon

0

Die drei Hauptstufen der E-Mail-Validierung:

1) Überprüfung des regulären Ausdrucks auf eine korrekt formatierte E-Mail-Adresse email@email.com

2) E-Mail-Domain-Prüfung anhand von MX-Einträgen, um festzustellen, ob der Domain-Name einen E-Mail-Dienst enthält

3) Senden einer Bestätigungs-E-Mail mit einem Bestätigungslink oder -code

Level 1:

In Visual Studio können Sie den "Regular Expression Validator" verwenden. Und in der Eigenschaft "ValidationExpression" können Sie auf die Schaltfläche "..." klicken, die einen Assistenten enthält, der im regulären Ausdrucksformat für E-Mail-Adressen hinzugefügt werden kann.

Level 2:

Hier ist mein C # -Code, um mithilfe von nslookup zu überprüfen, ob eine E-Mail-Domain über gültige MX-Einträge verfügt. Läuft unter Win 2008 R2 und Win 7 schnell und problemlos.

using System.Net.Mail;
using System.Diagnostics;

public static bool checkMXRecords(string email) 
    {
        MailAddress addr = new MailAddress(email);
        string domain = addr.Host;

        string command = "nslookup -querytype=mx " + domain;
        ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/c " + command);

        procStartInfo.RedirectStandardOutput = true;
        procStartInfo.UseShellExecute = false;

        procStartInfo.CreateNoWindow = true;

        Process proc = new Process();
        proc.StartInfo = procStartInfo;
        proc.Start();
        string result = proc.StandardOutput.ReadToEnd();

        if (result.ToLower().Contains("mail exchanger"))
        {
            return true;
        }
        else return false;

     } // checkMXRecords

Eine andere Option ist die Verwendung des Arsofttools-Nuget-Pakets, das unter Windows Server 2008 R2 zwar langsam ist, unter Win 7 jedoch schnell ausgeführt wird.

Stufe 3:

Zur E-Mail-Bestätigung können Sie entweder eine E-Mail-spezifische Hex-URL (unter Verwendung von Verschlüsselungsfunktionen) usw. erstellen http://domain.com/validateEmail?code=abcd1234 , um die E-Mail-Adresse zu überprüfen, wenn der Benutzer darauf klickt. Es ist nicht erforderlich, diese URL im Speicher zu speichern.

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.