mail d'envoi du mot de passe

Eléphanteau du PHP | 29 Messages

20 mai 2008, 15:53

Bonjour,

je voudrais pouvoir envoyer un mail pour qu'un membre inscrit dans ma base de donnée puisse récuperer son mot de passe en cas d'oubli, j'ai essayé avec ce code mais ça ne marche pas,pourtant il n'ya pas de message d'erreur :?:
verif.php

Code : Tout sélectionner

<?php $cnx = mysql_connect( "localhost", "root", "" ) ; //s�lection de la base de donn�es: $db = mysql_select_db( "xxxx" ) ; //Vérification de l'existence de la variable ; on vérifie aussi qu'elle n'est pas vide if((isset($_POST['email'])) && (!(empty($_POST['email'])))) { $mail = htmlspecialchars($_POST['email'], ENT_QUOTES); // on sécurise la variable avant //On compte le nombre d'entrée(s) dans la table où le champ "mail" vaut $mail $nombremail = mysql_result(mysql_query("SELECT COUNT(*) FROM membre WHERE email = '".$mail."'"), 0); if ($nombremail!= 0) { $tablettre = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"); mt_srand((float) microtime()*10000); $a = mt_rand(0, 9); $b = mt_rand(0, 9); $c = mt_rand(0, 9); $d = mt_rand(0, 9); $e = mt_rand(0, 9); $f = mt_rand(0, 26); $g = mt_rand(0, 26); $h = mt_rand(0, 26); $i = mt_rand(0, 26); $j = mt_rand(0, 26); $motaleatoire = $a.$tablettre[$f].$b.$tablettre[$g].$c.$tablettre[$h].$d.$tablettre[$i].$e.$tablettre[$j]; echo 'Votre adresse e-mail '.$mail.' existe dans nos tables et un mail de vérification vient de vous être envoyé.<br /><br />Consultez votre boîte mail, des explications vous seront fournies.'; $message = '<h5>Bonjour !<br>Vous avez demandé à redéfinir votre mot de passe. Veuillez cliquer sur le lien de vérification ci-dessous afin qu\'un nouveau mot de passe soit défini.<br><br></h5><a>http://www.votre-site.com/verif_mdp.php?e='.$mail.'&v='.$motaleatoire.'</a><br><br><br><h6>Ce mail a été envoyé automatiquement, veuillez ne pas y répondre.<br>Si ce mail vous a été envoyé alors que vous n\'en avez pas fait la demande, ne vous inquiétez pas, personne à part vous ne pourra redéfinir votre mot de passe.</h6>'; $message = '<html><head></head><body>' . $message . '</body></html>'; $sujet = 'webmaster de votre-site.com : Mail de vérification'; $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; $headers .= 'From: [email protected]'; mail($mail, $sujet, $message, $headers); mysql_query('UPDATE membre SET verif="' . $motaleatoire . '" WHERE email="' . $mail .'"') OR DIE (mysql_error()); } else { ?> <h3><span style=\'color:red\'>ERREUR : Votre adresse mail n\'existe pas dans la table.</span></h3><br /><!-- écriture de l'erreur --> <form method="post" action="./oubli_mdp.php"> <input type="text" name="email"> <input type="submit" value="Envoyer les informations"> </form> <?php } } else { ?> <form method="post" action="./oubli_mdp.php"> <input type="text" name="email"> <input type="submit" value="Envoyer les informations"> </form> <?php } ?>
code formulaire

Code : Tout sélectionner

<form method="post" action="./verif.php"> <input type="text" name="email"> <input type="submit" value="Envoyer les informations"> </form>
MERCI

ViPHP
ViPHP | 2291 Messages

20 mai 2008, 16:16

Salut,

Il manque un . ici
Ton code :
$message = '<h5>Bonjour !<br>Vous avez demandé à redéfinir votre mot de passe. Veuillez cliquer sur le lien de vérification ci-dessous afin qu\'un nouveau mot de passe soit défini.<br><br></h5><a>http://www.votre-site.com/verif_mdp.php?e='.$mail.'&v='.$motaleatoire.'</a><br><br><br><h6>Ce mail a été envoyé automatiquement, veuillez ne pas y répondre.<br>Si ce mail vous a été envoyé alors que vous n\'en avez pas fait la demande, ne vous inquiétez pas, personne à part vous ne pourra redéfinir votre mot de passe.</h6>'; 
  
        $message = '<html><head></head><body>' . $message . '</body></html>';
Correction :
$message = '<h5>Bonjour !<br>Vous avez demandé à redéfinir votre mot de passe. Veuillez cliquer sur le lien de vérification ci-dessous afin qu\'un nouveau mot de passe soit défini.<br><br></h5><a>http://www.votre-site.com/verif_mdp.php?e='.$mail.'&v='.$motaleatoire.'</a><br><br><br><h6>Ce mail a été envoyé automatiquement, veuillez ne pas y répondre.<br>Si ce mail vous a été envoyé alors que vous n\'en avez pas fait la demande, ne vous inquiétez pas, personne à part vous ne pourra redéfinir votre mot de passe.</h6>'; 
  
        $message .= '<html><head></head><body>' . $message . '</body></html>';
:wink:

Eléphanteau du PHP | 29 Messages

20 mai 2008, 16:25

merci pour ta remarque mais ça ne change rien je n'ai pas reçu l'émail, juste une question :lol:
dans $headers .= 'From: [email protected]';
es que je peux mettre une adresse email :?:

ViPHP
ViPHP | 2291 Messages

20 mai 2008, 16:33

A tu vérifier que tu reçois bien des valeurs de ton formulaire ?
echo'<pre>';
print_r($_POST);
echo'</pre>';
A placer dans le fichier verfi.php

Eléphanteau du PHP | 29 Messages

20 mai 2008, 16:34

Voici ce que j'ai comme message:
Votre adresse e-mail [email protected] existe dans nos tables et un mail de vérification vient de vous être envoyé.

Consultez votre boîte mail, des explications vous seront fournies.
Mais en ouvrant ma boite email je ne trouve pas le message?

Oui je recois bien les données

Mammouth du PHP | 1353 Messages

20 mai 2008, 16:39

Personnellement je pense que tu devrais tester la valeur du retour de mail avant d'affirmer que la mail a été envoyé à tes utlisateurs... ;)
$mail = mail($mail, $sujet, $message, $headers); 
if($mail) echo "Un mail vous a été envoyé........";
(et encore même si mail = true cela ne garantie pas que le mail est envoyé, mais c'est déjà qu'il est accepté pour livraison par le serveur...)

Et pour répondre à ta question précédente : oui tu peux mettre une adresse email dans $headers .= 'From: [email protected]'; :) Cela sera l'adresse affichée comme émettrice du message.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

ViPHP
ViPHP | 2291 Messages

20 mai 2008, 17:22

Ce que guilt92 dit est judicieux, et quand a ton message cela n'a strictement rien a voir avec ceci
echo'<pre>'; 
print_r($_POST); 
echo'</pre>';

Eléphanteau du PHP | 29 Messages

21 mai 2008, 11:00

Voiçi le message que j'ai en modifiant le bout de code comme ceci:
  $message = '<h5>Bonjour !<br>Vous avez demandé à redéfinir votre mot de passe. Veuillez cliquer sur le lien de vérification ci-dessous afin qu\'un nouveau mot de passe soit défini.<br><br></h5><a>http://www.votre-site.com/verif_mdp.php?e='.$mail.'&v='.$motaleatoire.'</a><br><br><br><h6>Ce mail a été envoyé automatiquement, veuillez ne pas y répondre.<br>Si ce mail vous a été envoyé alors que vous n\'en avez pas fait la demande, ne vous inquiétez pas, personne à part vous ne pourra redéfinir votre mot de passe.</h6>';
 
        $message .= '<html><head></head><body>' . $message . '</body></html>';
                                       
        $sujet = 'webmaster de votre-site.com : Mail de vérification';
        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
        $headers .= 'From: [email protected]';
 
        mail($mail, $sujet, $message, $headers);
$mail = mail($mail, $sujet, $message, $headers); 
if($mail) echo "Un mail vous a été envoyé........"; 
echo'<pre>'; 
print_r($_POST); 
echo'</pre>';
le message:
Votre adresse e-mail [email protected] existe dans nos tables et un mail de vérification vient de vous être envoyé.

Consultez votre boîte mail, des explications vous seront fournies.Un mail vous a été envoyé........

Array
(
[email] => [email protected]
)
le probléme c'est je ne reçoi pas le message :(

Eléphant du PHP | 175 Messages

21 mai 2008, 12:31

la fonction mail fonctionne t elle correctement sur ton serveur?

ton serveur d'envoi de mail accepte le relay? (pb du from)

As tu tester l'envoi d'un mail simple dans un script de test?

si tes test fonctionennt, comme c'est une adresse yahoo, ton message n'est il pas blackliste? dans les indesirables? etc.

bref pas mal de question sur les mails avant de repondre a ton script...

sinon pour etre plus coherent je ferais ceci ;) ($mail est deja utilise au dessus.. ca eviteras d'ecraser ta variable $mail)
$result_mail = mail($mail, $sujet, $message, $headers);  
if($result_mail) echo "Un mail vous a été envoyé........";
PS: evite les mails valide dans ton code ;)

Eléphanteau du PHP | 29 Messages

21 mai 2008, 12:50

comment savoir si la fonction fonctionne sur mon serveur????
j'ai essayé d'envoyer un mail de test, mais je ne reçois toujours rien :(
Il faut noter que je travaille en local, je ne sais pas s'il ya une differernce :?:

Eléphant du PHP | 175 Messages

21 mai 2008, 12:57

cette simple ligne dans un script a part:
<?php
     mail('[email protected]', 'test', 'un message de test');
?>
si tu n'as pas de message d'erreur essaie avec d'autres mail que des yahoo.fr

sinon tu es sur quel systeme d'exploitation? (windows, linux, etc.)
Quel serveur de mail est configuré pour envoyer des mails? (serveur smtp)

Eléphanteau du PHP | 29 Messages

21 mai 2008, 13:17

J'ai essayé mais ça ne donne rien, pas de message d'erreur ,ni de messagge reçu, m^eme en changeant l'adresse email yahoo.
Je travaille sous linux.
Pour le serveur de mail aucune idée

Eléphant du PHP | 175 Messages

21 mai 2008, 14:33

sous linux les mail sont envoyes en passant par la ligne de commande?

il faut aussi penser a regarder dans le php.ini le bloc: [mail function]

ensuite si c'est pour le boulot demande a ton administrateur la config pour le mail,
si c'est pour du perso il faut configurer la machine pour pointer vers le serveur smtp de ton founisseur d'acces

la le probleme semble plutot etre un probleme de configuration de la machine qu'un probleme de script.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

21 mai 2008, 14:34

Il se peut que ton script ne fonctionne pas en local. C'est ce qui m'arrive fréquemment...du coup, je transfère mes scripts d'envoi de mail sur le serveur pour les tester...en envoyant toujours à moi-même comme destinataire, dans un premier temps...pour ne pas laisser un internaute spammer (ou alors protège ta page, pour le temps du développement, par un .htaccess).

L'intérêt est de tester ce qui se passe réellement.
En attendant, en local, tu affiche le texte de l'e-mail au lieu de la commande mail().

Sinon, comme parade, au lieu de la simple fonction mail() de PHP, j'utilise HTMLMimeMail de PHPGuru.org.(version PHP5). Il s'agit de scripts PHP déjà écrits, à télécharger, avec des exemples de comment utiliser ces scripts.
Basiquement, cela te permet d'envoyer un email, et dans les paramétrages, tu peux mettre un SMTP (même réglage que dans ton logiciel de messagerie email, celui de ton fournisseur internet). Ainsi je peux tester en local l'envoi de mail. Sinon, je transfère mes scripts sur le serveur.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.