Question sur verification de l'e-mail

Eléphant du PHP | 259 Messages

30 mai 2008, 13:24

Bonjour,

J'ai un site web de petite annonce, lorsqu'une personne cré une annonce il reçoit alors un e-mail afin de valider son annonce et par la même occasion de vérifier si son e-mail est exacte (afin que les internautes puissent contacter la personne).

Je voulais savoir s'il y avait une méthode/script afin de savoir si le mail est bien envoyé et si l'e-mail existe bien (dans ma page je vérifie si l'e-mail contient bien un @)

Même si l'e-mail existe, je pense que défois l'e-mail ne doit pas arriver non ?
Je remarque que pas mal de personne ne valdie pas leur annnonce ce qui fait que je perd du "contenu"..
Pensez vous que je dois enlever le systéme de validation de l'annonce et de l'e-mail ? En prenant le risque d'avoir des e-mail incorrect ?

Merci d'avance pour vos réponses

Eléphant du PHP | 54 Messages

30 mai 2008, 14:09

Non,

C'est mieu d'Avoir un mail pour valider mais tu doit:
1- t'assurer d'avoir un serveur Mail sur ton Serveur Main
2- Avoir le petit Script. Le plus simple est d'utiliser la fonction toute prête de Mail.
3- Pour tester essais avec ton ADRESSE email. Comme sa si tu recois bien le mail tu peux ensuite remplacer les champs par des Variable qui contienne les infos de l'utilisateur.

En plus si tu ne met aucune validation, c'est dangereux que des "bot""robot" fasse planter ton serveur en envoyant des milliers d'annonce!

Donc C'est beaucoup mieu un systeme de validation (tan qu'a moi)

Si tu as besoin d'aide pour le consevoir, Je suis la ;)

Maxime
S'il faut vivre longtemps, vaux mieu le faire avec le sourire.

Eléphant du PHP | 259 Messages

30 mai 2008, 14:52

Merci pour ta réponse.

J'utilise la fonction mail() de php, j'ai déjà testé plusieurs fois avec mon adresse e-mail et j'ai bien reçu l'e-mail.
Mais comme je vois pas mal de personne qui ne valide pas leur annonce je me posait des questions s'il recevait bien l'e-mail ou pas..

Mammouth du PHP | 2937 Messages

30 mai 2008, 14:54

Tu peux déjà vérifier si l'adresse électronique soumise a une tronche d'adresse électronique, au moyen d'une expression régulière.
$adresse = '[email protected]';
if (preg_match ("/^[-_.0-9a-z]+@[-0-9a-z]+\.[a-z]{2,4}(\.[a-z]{2})?$/i", $adresse))
{
  // Tes instructions réservées aux adresses bien formées
}
else
{
  // Tes instructions pour le cas contraire
}
À cette vérification tu peux ajouter celle qui consiste à vérifier si la seconde partie de l'adresse ne correspond pas à un nom de domaine susceptible d'être utilisé par les spammeurs. Pour cela, tu peux t'inspirer du travail de recensement de chongqed.org, qui fournit une longue liste de spammeurs.

Eléphant du PHP | 259 Messages

30 mai 2008, 15:37

Merci de ta réponse. J'avais déjà mis la fonction pour vérifier la structure de l'e-mail, mais en mettant [email protected] ça passe quand même.

En fait une fois une annonce posté et que la personne a validé l'annonce (par l'e-mail qu'elle reçoit) je valide par moi même (manuellement) les annonces donc j'ai vite fait de supprimer tout ce qui est publicité, spam..etc

Le seul souci est que la personne reçoit bien l'e-mail pour valider son annonce.

Eléphant du PHP | 224 Messages

30 mai 2008, 17:03

Bonjour :)

Bon, personnellement je ne sais pas s'il y a un moyen sûr de savoir si le destinataire à bien reçu le message, en tout cas il est sûrement possible de tracer son parcours jusqu'au dernier serveur de réception... mais comment faire, ça je ne sais pas :( ... faudrait demander à un administrateur serveur familiarisé avec ces techniques...

En tout cas, il y a quand-même un moyen rigolo de savoir si le destinataire a bien consulté le message ou, du moins, s'il l'a bien affiché sur sa messagerie... c'est une technique qu'utilisent certains spameurs pour savoir si les adresses email de leur listing sont bien actives.

Attention toutefois, ce n'est pas une technique 100% sûre, car si le destinataire a configuré son logiciel de messagerie pour n'afficher que du texte, ou s'il consulte ses messages en mode "off-line", cette méthode s'avère malheureusement (ou heureusement devrais-je plutôt dire ;) ) inefficace... mais ces pratiques de sécurité ne sont utilisées que par très très peu de personnes finalement (ce qui n'est pas très prudent, faut avouer)...

Alors, voici la marche à suivre pour utiliser cette astuce :

1. Lorsque tu génères le message de confirmation à envoyer au destinataire, insère dans le corps du message une image vide, c'est à dire, une balise "img" avec des dimensions à 0 (zéro) et un style "display: none", histoire qu'elle ne s'affiche pas ;

2. L'astuce consiste donc à mettre, dans l'attribut "src" de la balise image, l'adresse complète vers un script Php qui se chargera de récupérer le mail du destinataire et de la sauvegarder dans un petit fichier texte ;

3. Ensuite, il faut créer ce petit fichier Php, que nous nommerons par exemple "mel.php", avec le contenu suivant (à optimiser ou compléter le cas échéant) :
<?php
if (isset($_GET['mel'])) {
	$mel = date('Ymd-His').'-'.$_GET['mel'].chr(10); // Date-Heure-Email a sauvegarder
	$fichier = @fopen('mel.txt', 'ab'); // Le mode 'ab' cree un fichier et ajoute les donnees a la fin
	@fwrite($fichier, $mel); // Ecriture des donnees
	@fclose($fichier); // Fermeture du fichier
} else {
	// Redirection pour visualiser le fichier texte avec les emails sauvegardes (non necessaire)
	header("Location: http://".$_SERVER&#91;'HTTP_HOST'&#93;.rtrim(dirname($_SERVER['PHP_SELF']), '/\\')."/mel.txt");
}
?>
4. Place ce fichier Php dans un serveur personnel pour qu'il soit accessible en ligne ;

5. Enfin, la balise "img" dans le corps du message devrait ressembler à ceci :
<img src="http://chemin.complet.au.fichier/[email protected]" alt="img" height="0" width="0" style="display: none;" />
6. Comme on le voit dans cet exemple, l'adresse du fichier "mel.php" comporte une variable "mel" avec comme valeur l'email du destinataire, c'est cet email qui sera sauvegardé.

Voilà, dès que le destinataire affichera l'email dans sa messagerie, l'image cachée dans le message enverra son adresse email au script "mel.php" qui se chargera de le sauvegarder avec la date et l'heure de la sauvegarde...

Il suffira de consulter le fichier "mel.php" (avec la redirection) ou "mel.txt" pour voir tous les emails des messages qui ont été effectivement consultés/affichés...

Bon, je vais certainement me faire taper sur les doigts de divulguer de telles solutions sur un forum public d'échanges comme celui-ci :( ... et avec raison :shock: ... mais bon, s'informer sur ces méthodes fait aussi partie des choses que nous devrions faire, ne serait-ce que pour être avertis des techniques existantes et ainsi pouvoir adopter des pratiques de prudence adaptées...

Je laisse donc le soin aux admins de décider du sort de ce post... leur choix sera le mien.

à+ :)
Fredo d;o)
"Un pas à la fois me suffit..." (Gandhi)

ViPHP
AB
ViPHP | 5818 Messages

30 mai 2008, 18:08

Merci de ta réponse. J'avais déjà mis la fonction pour vérifier la structure de l'e-mail, mais en mettant [email protected] ça passe quand même.

En fait une fois une annonce posté et que la personne a validé l'annonce (par l'e-mail qu'elle reçoit) je valide par moi même (manuellement) les annonces donc j'ai vite fait de supprimer tout ce qui est publicité, spam..etc

Le seul souci est que la personne reçoit bien l'e-mail pour valider son annonce.
Pour [email protected], c'est normal que ça passe car cela correspond à un format d'adresse email valide et dans l'absolu quelqu'un pourrait avoir cette adresse.

Pour info à partir de la version 5.2 de php tu peux également utiliser filter_var
<?php
if(!filter_var("[email protected]", FILTER_VALIDATE_EMAIL))
 {
 echo("E-mail is not valid");
 }
else
 {
 echo("E-mail is valid");
 }
?>
Cela dit ton exemple ci-dessus devrait être considéré comme valide également. En fait les vérifications d'email sont surtout destinées pour avertir l'utilisateur qu'il s'est trompé. Sinon n'importe quel utilisateur averti peut t'envoyer une adresse email ayant le bon format mais qui ne correspond à rien.
La seule manière de s'assurer que l'adresse est bonne est d'envoyer un lien de validation à l'intérieur du mail.
C'est un peu le même principe que ce que vient de t'indiquer FredoMkb, sauf que cela demande la participation active du receveur (clic sur le lien qui permet par exemple de confirmer une inscription) mais en contre partie cela ne sera pas bloqué par les anti spam

Mr Invité
Invité n'ayant pas de compte PHPfrance

04 juin 2008, 16:53

désolé de remonter ce post mais je suis au boulot et j'ai pas grand chose à faire donc... je viens apporter ma petite pierre à l'édifice... tout le monde s'en fou, bref :)

1) Il est possible de demander un accusé de reception dans un mail envoyé via php.
inconvénient : tous les clients mail ne prennent pas en compte cette fonctionalité et si c'est le cas, encore faut t'il que le destinataire le veuille.

2) Solution un peu plus fourbe, cela nécessite d'envoyer le mail au format HTML. Il suffit d'insérer une image dans le mail, cette image pointe vers un script php et lui passe l'adresse (en paramètre) de la personne qui l'a lu. Ton image doit être générée par le script en question (en utilisant le header qui va bien)
inconvénient (et oui la solution parfaite n'existe pas!) : le client mail du destinataire doit prendre en charge le HTML et doit afficher les images pour que ça marche.
Cette solution est très utilisée par les méchants spammer pour détecter les adresses valides.

allez plus qu'une heure, souhaitez moi bon courage !!!

Mr Invité
Invité n'ayant pas de compte PHPfrance

04 juin 2008, 16:55

rhoo quel nul je suis la solution numéro 2 avait déjà été proposée, bon ben j'ai plus qu'à dormir moi