Pourquoi la validation régulière des e-mails ne suffit pas. Validation des enregistrements MX avec des exemples en PHP et Ruby

Combien de fois ont-ils continué à répéter au monde ... Il y a un long et probablement sans fin débat sur le bon qui est régulier et il est nécessaire de vérifier le champ de messagerie de l'utilisateur.

Oui, vous devez vraiment vérifier la saison régulière. Mais nos produits sont en ligne. Alors pourquoi ne pas utiliser son vrai pouvoir?

De plus, il y a souvent des situations où les utilisateurs se trompent vraiment lors de la saisie d'une adresse e-mail (y compris dans un domaine). Eh bien, ou, dans le champ e-mail, entrez n'importe quel "Habrakadabra" possible, qui vole facilement via regexp, mais ne peut pas être du courrier, car même ce domaine n'existe pas dans la nature :)

Soit dit en passant, sur cette nuance, nous avons littéralement juste volé vers le haut: l'essentiel est que pour une raison quelconque, sur le site soulevé sur un CMS-ke plutôt populaire, les notifications par courrier électronique se sont déclenchées.

Il s'est avéré que la raison en était l'adresse du spammeur.

Il y avait plusieurs raisons:

  1. Le CMS est assez populaire et, par conséquent, il y a beaucoup de spammeurs enregistrés. Et ce qui est plus intéressant - dans les paramètres, vous pouvez (et beaucoup le font d'ailleurs) - désactiver la vérification des e-mails. Dans ce cas, vous pouvez (et c'est ce que font la plupart des bots) ici pour entrer n'importe quel déchet
  2. Les textes des lettres n'ont pas été réécrits à partir des lettres standard.

Total: les spammeurs ont massivement grimpé pour s'inscrire, ont jeté des e-mails à gauche sur le script, où nous avons essayé d'envoyer des lettres. Le filtre anti-spam a vu qu'un certain nombre d'e-mails provenaient de notre e-mail, avec des textes qu'il avait déjà vus à plusieurs reprises depuis d'autres adresses e-mail, et en même temps un nombre considérable d'entre eux tombaient sur des adresses e-mail inexistantes.

En général, l'adresse postale tombait périodiquement sous le spam.

Par conséquent, l'expérience, respectivement, peut et doit être argumentée que la vérification de la disponibilité d'un domaine sur Internet, ainsi que la présence d'un service de messagerie (enregistrements MX pour un domaine), est ce qui, en théorie, devrait exister et fonctionner dans les systèmes d'enregistrement des utilisateurs.

En fait, l'essence de la vérification est assez simple: lors de l'enregistrement, au stade de la validation des données utilisateur, nous séparons le domaine de la messagerie et voyons ce qu'il y a sur les MX.

Est-ce difficile? Pas vraiment. Mais cela peut réduire considérablement la charge des services postaux. Et soit dit en passant, il est beaucoup moins susceptible d'entrer dans les listes de spam (après tout, l'envoi d'un grand nombre de lettres à des adresses e-mail inexistantes est l'un des signes du spam).

En PHP, curieusement, c'est assez simple:

$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"; } 

J'expliquerai le plutôt «monstrueux» si. Le fait est que dans la documentation de la fonction getmxrr , il y avait des commentaires avec des références à son comportement qui n'étaient pas entièrement corrects. Et bien que je ne puisse pas les trouver sur php7.1 - une vérification supplémentaire n'est pas une vérification supplémentaire :)

Sur rubis, cela se fait de manière similaire:

 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 

Dans le même temps, je précise qu'une telle vérification du champ e-mail peut non seulement sérieusement affecter la qualité des informations dans la base de données de votre projet (et réduire le risque d'envoi de notifications par les spammeurs), mais également entraîner une diminution des charges de travail. Après tout, l'envoi de lettres à partir d'un script est un processus assez lent dans la pratique.

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


All Articles