Warum eine regelmäßige E-Mail-Validierung nicht ausreicht. Validierung von MX-Datensätzen anhand von Beispielen in PHP und Ruby

Wie oft haben sie sich in der Welt wiederholt ... Es gibt eine lange und wahrscheinlich endlose Debatte darüber, welche Regelmäßigkeit korrekt ist, und es ist notwendig, das E-Mail-Feld des Benutzers zu überprüfen.

Ja, Sie müssen sich wirklich bei der regulären Saison erkundigen. Aber unsere Produkte sind online. Warum also nicht ihre wahre Kraft einsetzen?

Darüber hinaus gibt es häufig Situationen, in denen sich Benutzer bei der Eingabe einer E-Mail-Adresse (auch in einer Domain) wirklich irren. Nun, oder geben Sie im E-Mail-Feld ein mögliches "Habrakadabra" ein, das leicht durch regulären Ausdruck fliegt, aber keine E-Mail sein kann, da selbst diese Domain in der Natur nicht existiert :)

Übrigens, in dieser Nuance sind wir buchstäblich nur hochgeflogen: Unter dem Strich haben wir auf der Website, die auf einem ziemlich beliebten CMS erstellt wurde, aus irgendeinem Grund keine E-Mail-Benachrichtigungen mehr gesendet.

Der Grund war, wie sich herausstellte, die Adresse des Spammers.

Es gab mehrere Gründe:

  1. CMS ist sehr beliebt und daher gibt es viele registrierte Spammer. Und was noch interessanter ist - in den Einstellungen, die Sie (und viele übrigens auch) können - deaktivieren Sie die E-Mail-Überprüfung. In diesem Fall können Sie (und so tun es die meisten Bots) hier jeden Müll eingeben
  2. Texte von Briefen wurden nicht von Standardtexten umgeschrieben.

Insgesamt: Spammer kletterten massiv, um sich zu registrieren, warfen linke E-Mails an das Skript, wo wir versuchten, Briefe zu senden. Der Spamfilter stellte fest, dass eine Reihe von E-Mails aus unserer E-Mail stammten, mit Texten, die er bereits viele Male von anderen E-Mail-Adressen gesehen hatte, und gleichzeitig fiel eine beträchtliche Anzahl von ihnen auf nicht vorhandene E-Mail-Adressen.

Im Allgemeinen fiel die Postanschrift regelmäßig unter Spam.

Daher kann bzw. sollte die Erfahrung argumentiert werden, dass die Überprüfung der Verfügbarkeit einer Domain im Internet sowie der Verfügbarkeit eines Mail-Dienstes (MX-Einträge für eine Domain) theoretisch in Benutzerregistrierungssystemen vorhanden sein und funktionieren sollte.

Tatsächlich ist das Wesentliche der Überprüfung recht einfach: Während der Registrierung, während der Validierung der Benutzerdaten, teilen wir die Domain von der E-Mail auf und sehen, was auf MXs vorhanden ist.

Ist es schwierig Nicht wirklich. Dies kann jedoch die Belastung der Postdienste erheblich verringern. Übrigens ist es viel weniger wahrscheinlich, in Spam-Listen zu gelangen (das Senden einer großen Anzahl von Briefen an nicht vorhandene E-Mail-Adressen ist eines der Anzeichen für Spam).

In PHP ist das seltsamerweise ziemlich einfach:

$email ="11@sdlkfjsdl.co.uk"; $domain = substr(strrchr($email, "@"), 1); $res = getmxrr($domain, $mx_records, $mx_weight); if (false == $res || 0 == count($mx_records) || (1 == count($mx_records) && ($mx_records[0] == null || $mx_records[0] == "0.0.0.0" ) ) ){ //   -  mx-   echo "No MX for domain: $domain"; }else{ // ,  MX-   ,      echo "It seems that we have qualify MX-records for domain: $domain"; } 

Ich werde das eher "monströse" erklären, wenn. Tatsache ist, dass in der Dokumentation für die Funktion getmxrr Kommentare mit Verweisen auf ihr Verhalten enthalten waren, die nicht ganz korrekt waren. Und obwohl ich sie auf php7.1 nicht finden konnte - ein zusätzlicher Scheck ist kein zusätzlicher :)

Bei Ruby geschieht dies auf ähnliche Weise:

 domain = invite.email.split('@').last.mb_chars.downcase.to_s.force_encoding("UTF-8") # ,   .         UTF-8,     mail_servers = Resolv::DNS.open.getresources(domain, Resolv::DNS::Resource::IN::MX) if mail_servers.empty? # MX-.       false else true end 

Gleichzeitig werde ich klarstellen, dass eine solche Überprüfung des E-Mail-Felds nicht nur die Qualität der Informationen in der Datenbank Ihres Projekts ernsthaft beeinträchtigen (und das Risiko verringern kann, dass Spammer Benachrichtigungen senden), sondern auch zu einer Verringerung der Arbeitslast führt. Schließlich ist das Senden von Briefen aus einem Skript in der Praxis ein ziemlich langsamer Prozess.

Source: https://habr.com/ru/post/de434640/


All Articles