Je suis tombé sur ce code PHP pour vérifier l'adresse e-mail en utilisant SMTP sans envoyer d'e-mail .
Quelqu'un a-t-il essayé quelque chose de similaire ou cela fonctionne-t-il pour vous? Pouvez-vous dire si un e-mail que le client / utilisateur entre est correct et existe?
Réponses:
Il existe deux méthodes que vous pouvez parfois utiliser pour déterminer si un destinataire existe réellement:
Vous pouvez vous connecter au serveur et émettre une
VRFY
commande. Très peu de serveurs prennent en charge cette commande, mais elle est destinée exactement à cela. Si le serveur répond avec un DSN 2.0.0, l'utilisateur existe.Vous pouvez émettre un
RCPT
, et voir si le courrier est rejeté.Si l'utilisateur n'existe pas, vous obtiendrez un DSN 5.1.1. Cependant, ce n'est pas parce que l'e-mail n'est pas rejeté que l'utilisateur existe. Certains serveurs rejetteront silencieusement des demandes comme celle-ci pour empêcher l'énumération de leurs utilisateurs. Les autres serveurs ne peuvent pas vérifier l'utilisateur et doivent accepter le message malgré tout.
Il existe également une technique antispam appelée liste grise, qui obligera le serveur à rejeter l'adresse initialement, en s'attendant à ce qu'un vrai serveur SMTP tente une redistribution un peu plus tard. Cela gâchera les tentatives de validation de l'adresse.
Honnêtement, si vous essayez de valider une adresse, la meilleure approche consiste à utiliser une simple regex pour bloquer les adresses manifestement invalides, puis à envoyer un e-mail réel avec un lien vers votre système qui validera la réception de l'e-mail. Cela garantit également que l'utilisateur a saisi son e-mail réel, et non une légère faute de frappe qui appartient à quelqu'un d'autre.
la source
D'autres réponses ici discutent des divers problèmes liés à cette tentative. J'ai pensé montrer comment vous pourriez essayer cela au cas où vous voudriez apprendre en le faisant vous-même.
Vous pouvez vous connecter à un serveur de messagerie via telnet pour demander si une adresse e-mail existe. Voici un exemple de test d'une adresse e-mail pour
stackoverflow.com
:Les lignes précédées de codes numériques sont des réponses du serveur SMTP. J'ai ajouté quelques lignes vides pour le rendre plus lisible.
De nombreux serveurs de messagerie ne renverront pas ces informations pour empêcher la collecte d'adresses e-mail par les spammeurs, vous ne pouvez donc pas vous fier à cette technique. Cependant, vous pouvez réussir à nettoyer certaines adresses e-mail manifestement incorrectes en détectant des serveurs de messagerie invalides ou en rejetant les adresses des destinataires comme ci-dessus.
Notez également que les serveurs de messagerie peuvent vous mettre sur liste noire si vous en faites trop de requêtes.
En PHP , je crois que vous pouvez utiliser
fsockopen
,fwrite
etfread
pour effectuer les étapes ci - dessus par programmation:la source
La réponse générale est que vous ne pouvez pas vérifier si une adresse e-mail existe événement si vous lui envoyez un e-mail: elle pourrait simplement aller dans un trou noir.
Cela étant dit, la méthode qui y est décrite est assez efficace. Il est utilisé dans le code de production de ZoneCheck sauf qu'il utilise RSET au lieu de QUIT.
Là où l'interaction de l'utilisateur avec sa boîte aux lettres n'est pas trop coûteuse, de nombreux sites testent en fait que le courrier arrive quelque part en envoyant un numéro secret qui doit être renvoyé à l'émetteur (soit en allant vers une URL secrète, soit en renvoyant ce numéro secret par courrier électronique). La plupart des listes de diffusion fonctionnent comme ça.
la source
Pas vraiment ..... Certains serveurs peuvent ne pas vérifier le "rcpt to:"
http://www.freesoft.org/CIE/RFC/1123/92.htm
Cela constitue un risque pour la sécurité .....
Si le serveur le fait, vous pouvez écrire un bot pour découvrir chaque adresse sur le serveur ...
la source
Cela échouera (parmi d'autres cas) lorsque le serveur de messagerie cible utilise la liste grise.
Liste grise : le serveur SMTP refuse la livraison la première fois qu'un client précédemment inconnu se connecte, autorise la ou les prochaines fois; cela permet de conserver un certain pourcentage de spambots, tout en permettant une utilisation légitime - car on s'attend à ce qu'un expéditeur de courrier légitime réessaye , ce que font les agents de transfert de courrier normaux.
Toutefois, si votre code ne vérifie que sur le serveur une fois , un serveur avec greylisting refusera la livraison (comme votre client se connecte pour la première fois); à moins que vous ne vérifiiez à nouveau dans quelques instants, vous rejetez peut-être par erreur des adresses e-mail valides.
la source
Quelques problemes:
Pour certains serveurs SMTP (comme gmail), vous devez utiliser SSL pour faire quoi que ce soit.Cela n'est vrai que lorsque vous utilisez le serveur SMTP de gmail pour envoyer des e-mails.la source
Bien que cette question soit un peu ancienne, cette astuce de service peut aider les utilisateurs qui recherchent une solution similaire à vérifier les adresses e-mail au-delà de la validation de la syntaxe avant l'envoi.
J'utilise ce service open source pour une validation plus approfondie des e-mails (vérification des enregistrements mx sur le domaine de l'adresse e-mail, etc.) pour quelques projets avec de bons résultats. Il vérifie également les fautes de frappe courantes, ce qui est très utile. Démo ici .
la source
"Pouvez-vous dire si un e-mail / utilisateur saisi est correct et existe?"
En fait, ce sont deux choses distinctes. Cela peut exister mais peut ne pas être correct.
Parfois, vous devez prendre les entrées de l'utilisateur à leur valeur nominale. Il existe de nombreuses façons de vaincre le système autrement.
la source
Tout ce que vous pouvez faire est de rechercher DNS et de vous assurer que le domaine qui se trouve dans l'adresse e-mail a un enregistrement MX, à part qu'il n'y a pas de moyen fiable de gérer cela.
Certains serveurs peuvent fonctionner avec la méthode rcpt-to où vous parlez au serveur SMTP, mais cela dépend entièrement de la configuration du serveur. Un autre problème peut être qu'un serveur surchargé peut renvoyer un code 550 indiquant que l'utilisateur est inconnu, mais il s'agit d'une erreur temporaire, il y a une erreur permanente (451 je pense?) Qui peut être renvoyée. Cela dépend entièrement de la configuration du serveur.
Je vérifierais personnellement l'enregistrement MX DNS, puis enverrais un e-mail de vérification si l'enregistrement MX existe.
la source
la source
getmxrr
En supposant qu'il s'agisse de l' adresse de l'utilisateur , certains serveurs de messagerie permettent à la commande SMTP VRFY de vérifier réellement l'adresse e-mail par rapport à ses boîtes aux lettres. La plupart des sites majeurs ne vous donneront pas beaucoup d'informations; la réponse de gmail est "si vous essayez de l'envoyer, nous essaierons de le livrer" ou quelque chose d'intelligent comme ça.
la source
Je pense que vous ne pouvez pas, il y a tellement de scénarios où même l'envoi d'un e-mail peut échouer. Par exemple. le serveur de messagerie du côté utilisateur est temporairement arrêté, la boîte aux lettres existe mais est pleine, le message ne peut donc pas être remis, etc.
C'est probablement pourquoi tant de sites valident une inscription après que l'utilisateur a confirmé avoir reçu l'e-mail de confirmation.
la source
Je peux confirmer les réponses de Joseph et Drew à utiliser
RCTP TO: <address_to_check>
. Je voudrais ajouter quelques petits additifs en plus de ces réponses.Fournisseurs fourre-tout
Certains fournisseurs de messagerie mettre en œuvre une politique fourre-tout, ce qui signifie
*@mydomain.com
retournera positive à laRCTP TO:
commande . Mais cela ne signifie pas nécessairement que la boîte aux lettres "existe", comme dans "appartient à un humain". Rien ne peut être fait grand-chose ici, soyez juste conscient.Liste grise / liste noire IP
Liste grise: la première connexion depuis une adresse IP inconnue est bloquée. Solution: réessayez au moins 2 fois.
Blacklisting: si vous envoyez trop de requêtes depuis la même IP, cette IP est bloquée. Solution: utilisez la rotation IP; Reacher utilise Tor.
Requêtes HTTP sur les formulaires d'inscription
Ceci est très spécifique au fournisseur, mais vous pouvez parfois utiliser des requêtes HTTP bien conçues et analyser les réponses de ces requêtes pour voir si un nom d'utilisateur est déjà inscrit ou non avec ce fournisseur.
Voici la fonction pertinente d'une bibliothèque open-source que j'ai écrite pour vérifier les
*@yahoo.com
adresses à l'aide de requêtes HTTP: check-if-email-exists . Je sais que mon code est Rust et que ce fil est étiqueté PHP, mais les mêmes idées s'appliquent.Boîte de réception complète
Cela peut être un cas extrême, mais lorsque l'utilisateur a une boîte de réception pleine,
RCTP TO:
il renverra un5.1.1 DSN
message d'erreur indiquant qu'elle est pleine. Cela signifie que le compte existe réellement!Divulgation
Je lance Reacher , une API de vérification des e-mails en temps réel. Mon code est écrit en Rust et est 100% open-source. Découvrez-le si vous voulez une solution plus robuste:
Github: https://github.com/amaurymartiny/check-if-email-exists
Avec une combinaison de différentes techniques pour sauter à travers les cerceaux, j'arrive à vérifier environ 80% des e-mails que mes clients vérifient.
la source
la source