6
votes

Adresse e-mail Méthodes de validation (bouton abonnement)

Je codifie un site en PHP et je suis actuellement sur la page Contactez-nous et je me demandais quelle était la meilleure façon de valider une adresse email?

  1. En envoyant un lien de validation à leur email?
  2. regex
  3. toute autre méthode?

    Pourriez-vous également me dire pourquoi et un guide sur mon chemin pour la réaliser? Je ne veux pas que quelqu'un fasse le code pour moi, car cela n'est pas amusant pour moi et je n'apprendrai pas quelques conseils sur les techniques utilisées pour atteindre les méthodes ci-dessus.

    aussi je vais utiliser ces méthodes pour implémenter un bouton d'abonnement sur ma page Web. Est-ce la meilleure façon de faire cela? Toute autre méthode que je devrais cond isider?


2 commentaires

Dupliquer possible: Stackoverflow.com/Questtions/201323/...


Regex ne validera pas un courrier électronique, il ne fera que valider que l'entrée de l'utilisateur ressemble à un email. (adasdsa@dadsd.com va valider) Si vous devez vraiment valider, vous devez envoyer un email de validation.


10 Réponses :


16
votes

Je passe habituellement à travers ces étapes

  1. regex
  2. Envoyez un code d'activation à l'e-mail

    Si la première étape échoue, elle n'atteint jamais la deuxième étape. Si l'envoi de courrier électronique échoue parce que l'e-mail n'existe pas, je supprime le compte ou faire d'autres choses

    - Edit

    3 - Si, pour une raison quelconque, l'e-mail d'activation n'est pas envoyé, le courrier électronique ne se fait pas supprimer, il reste non approuvé pendant 7 jours (ou comme configuré par vous), la révision par courrier électronique est essayée toutes les 2-3 heures, Après ces jours-ci, si aucun succès, le courrier électronique est supprimé

    4 - Si l'email envoyé avec succès mais non activé, il reste non approuvé mais peut être réactivé à tout moment en générant un nouveau code d'activation


3 commentaires

Je voudrais également ajouter que, pour la commodité de l'utilisateur, affecter l'utilisateur non validé une sorte d'état «pré-approuvé» de sorte que lorsque la livraison du courrier est ralentissée, l'utilisateur peut toujours utiliser vos services. Et aussi, ne soyez pas trop strict dans votre regex, assurez-vous simplement que c'est «un peu Sorta ressemble à une adresse email», vous ne voulez pas trop de faux négatifs.


@Dennis: Je ne pense pas que la saisie d'une adresse électronique plausible mais potentiellement fausse est une raison suffisante de donner à l'utilisateur plus d'accès.


Veuillez ne pas utiliser de regex pour valider une adresse e-mail. Il n'est pas possible d'écrire une regex qui correspond à la spécification de RFC2822 exactement. Vous vous retrouverez avec des faux positifs et des faux négatifs. Les faux négatifs sont un gros problème car ils interdisent les adresses électroniques valides de la réussite. Jeffrey Friedl a développé un courrier électronique correspondant à Regex dans "Maîtriser régulièrement des expressions". C'était quelque chose comme 7 000 caractères et correspond à 98% des formats d'adresses valides. Il vaut mieux utiliser une bibliothèque qui l'utilise.



3
votes

Cela dépend de la question de savoir si l'utilisateur souhaite ou non recevoir une réponse.

Si l'utilisateur pose une question, il voudra une réponse et donnera probablement son adresse e-mail valide. Dans ce cas, j'utiliserais un chèque de regex très lâche pour attraper des fautes de frappe ou une adresse manquante. (Quelque chose comme . + @. + .)

Si l'utilisateur ne veut pas être contacté, mais que vous voulez connaître leur adresse, vous devez travailler avec un lien de validation. Il n'y a pas d'autre moyen de s'assurer que l'adresse e-mail est valide et appartient à l'utilisateur.


0 commentaires

11
votes

Je pense que le meilleur est une combinaison de 3. et 1.

dans une phase initiale, vous vérifiez de manière syntaxiquement le courrier électronique (pour attraper des fautes de frappe): xxx

Et dans une seconde, vous envoyez un courrier électronique avec une adresse de confirmation (aux deux erreurs de capture et des informations délibérément incorrectes).


1 commentaires

+1 Les personnes ont besoin de savoir sur filtre_var () , c'est tellement génial.



-1
votes
 function checkEmail($email) {
  if(preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])
  ↪*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/",
               $email)){
    list($username,$domain)=split('@',$email);
    if(!checkdnsrr($domain,'MX')) {
      return false;
    }
    return true;
  }
  return false;

2 commentaires

Votre regex rejette de nombreuses adresses électroniques valides. Par exemple *@example.com, "Bonjour world" @ exemple.com, quelqu'un @ [127.0.0.1], quelqu'un @ [2001: 1234: 1234 :: 1.2.3.4]


Pendant que je vous perdais avec l'inadéquation IPv6, le reste de la regex est trop pauvre à considérer.



3
votes

Le seul moyen de savoir vraiment si un email est valide ou non pour vous envoyer un courrier électronique. Si vous devez vraiment, utilisez l'une des ces . Techniquement , il n'y a même pas besoin d'être des périodes après les @ pour les domaines locaux. Tout ce qui est nécessaire est un domaine suit le @.


1 commentaires

Attendez que les gens commencent à mettre des valeurs expansion du côlon IPv6 à leur domaine. :-)



1
votes

dépend de votre objectif. Si vous devez avoir un email valide et actif, vous devez envoyer un email qui nécessite une vérification de la réception. Dans ce cas, il n'est pas nécessaire de validation des regex, sauf comme une commodité à votre utilisateur.

Mais si votre désir est d'aider l'utilisateur à éviter les fautes de frappe tout en minimisant la gêne de l'utilisateur, validez-la avec regex.


0 commentaires

2
votes

Une regex ne convient pas vraiment à la détermination de la validité de la syntaxe d'adresses électroniques et de l'option filtre_validate_email code> pour le filtre_var code> fonction est plutôt peu fiable aussi. J'utilise le e-mailAddressValidator Class a > Pour tester la syntaxe d'adresse e-mail.

J'ai mis en place quelques exemples de résultats incorrects renvoyés par filtre_var code> (version PHP 5.3.2-1ubuntu4.2). Il y a probablement plus. Certains sont certes un peu extrêmes, mais il est toujours intéressant de noter: p>

RFC 1035 2.3.1. Syntaxe de nom préférée forte>
http://tools.ietf.org/search/rfc1035
Sommarisé comme: un domaine consiste en des étiquettes séparées par des séparateurs de points (pas nécessairement vrai pour les domaines locaux). P>

echo filter_var('name@AbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghij.com', FILTER_VALIDATE_EMAIL);
// name@AbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghijAbcdefghij.com


1 commentaires

L'article de Doug Lovell de Linux Journal est factuellement faux dans plusieurs cas. Il répète les erreurs originales dans la RFC 3696 qui ont été corrigées dans l'errata. Malheureusement, Linux Journal n'a pas été jugé apte à corriger cet article trompeur et il est toujours cité comme une autorité.



2
votes

Avant d'envoyer un e-mail de validation Vous pouvez également utiliser checkdnsrr ( ) Pour vérifier que le domaine existe et dispose des enregistrements MX. Cela détectera les courriels qui utilisent des domaines de faux (comme user@idontexist.com). XXX

Nous devons utiliser Function_exists () Pour vérifier Checkdnsrr () est disponible pour nous car il n'était pas disponible sous Windows avant PHP 5.3.


5 commentaires

Pourquoi pensez-vous que les enregistrements MX sont requis pour que l'e-mail soit livré? "Si aucun enregistrement MX n'était présent, le serveur redevient à A, c'est-à-dire qu'il demande une demande d'un enregistrement du même domaine."


@sanmai tandis que cela pourrait être vrai en théorie, vous voyez rarement, si jamais, cela se produise dans la pratique. De plus, lorsqu'il s'agit de valider l'adresse e-mail, à l'exception de l'envoi d'un courrier électronique à l'adresse et d'attendre une réponse, aucun processus automatisé ne sera parfait. Cette méthode incluse. Mais si les mauvaises adresses électroniques fournies sont un problème, cela aidera à atténuer cela.


@ John-Conde J'ai vu cela arriver au moins plusieurs fois. Imaginez que vous décriviez un gestionnaire pourquoi votre précieux client ne peut pas enregistrer à l'aide de son adresse e-mail (ils vérifiaient).


J'ai vu la même chose Sanmai a. Ce n'est pas courant, mais c'est réel. En fin de compte, la vérification d'un enregistrement MX ne vous achète pas beaucoup, de toute façon, donc je ne me dérangerais pas.


Hmmm. Peut-être que cela serait-il mieux utilisé comme l'un des nombreux facteurs déterminants pour déterminer une probabilité d'adresses électroniques d'être légitime? Utilisé uniquement conjointement avec d'autres tests.



4
votes

Le meilleur moyen de le faire est d'envoyer un courrier électronique avec un lien de validation. À tout le moins si vous ne voulez pas d'emails d'activation, validez l'adresse e-mail. La meilleure fonction de validation électronique est Validateur d'adresse électronique conforme à la RFC par Sayers Dominic .

Inclure simplement Le fichier PHP dans votre projet et l'utilisez comme suit: P>

if (is_email($email, $checkDNS, $diagnose)) //$checkDNS and $diagnose are false by default
    echo 'Email valid';
else
    echo 'Email invalid';
  • Si $ checkdns est défini sur true, il validera que le domaine existe. Si le domaine n'existe pas, la fonction renvoie False Même si un email est valide. LI>
  • Si $ diagnostiquez est défini sur true, la fonction renvoie un code au lieu d'un booléen qui vous dira pourquoi l'e-mail est invalide (ou 0 s'il est valide). LI> ul> p>


0 commentaires

0
votes

Certaines bonnes réponses ici, et je suis d'accord avec le choisi, à l'exception du bit Regex. Au fur et à mesure que d'autres personnes ont souligné, il est difficile, voire impossible, il est impossible de trouver une regex qui implémente pleinement toutes les bizarreries de RFC 5321.

Vous êtes invitée à utiliser ma fonction PHP gratuite is_email () pour valider les adresses. Il est disponible ici .

Cela garantira qu'une adresse est entièrement conforme à la RFC 5321. Il peut également également vérifier si le domaine existe réellement.

Vous ne devez pas compter sur un validateur pour vous indiquer si l'adresse e-mail d'un utilisateur existe réellement: Certains fournisseurs de services Internet donnent des adresses non conformes à leurs utilisateurs, en particulier dans les pays qui n'utilisent pas l'alphabet latin. Plus dans mon essai sur la validation par e-mail ici: http://isemail.info/about .


0 commentaires