[RESOLU] problème envoi mail

Eléphant du PHP | 345 Messages

15 févr. 2022, 01:14

voila le script mais l'email n'arrive jamais.
<?php
session_start();
require_once 'config.php';
$msg = '';
if (!empty($_POST)) {	// Si le formulaire a été soumis
	if (!empty($_POST['mail'])) {	// Si le formulaire est correctement rempli
		// On fait une requête pour savoir si l'adresse e-mail est associé à un compte
		$pdostat = $bdd->prepare('SELECT COUNT(*) AS nb FROM membres WHERE mail = ?');
		$pdostat->bindValue(1, $_POST['mail']);
		$pdostat->execute();
 
		$row = $pdostat->fetch(PDO::FETCH_ASSOC);
 
		if (!empty($row) && $row['nb'] > 0) {	// Si l'adresse courriel est associé à un compte
			// On génère notre token
			$string = implode('', array_merge(range('A','Z'), range('a','z'), range('0','9')));
			$token = substr(str_shuffle($string), 0, 20);
 
			// On insère la date et le token dans la DB
	$pdostat = $bdd->prepare('UPDATE membres SET password_recov_asked_date = NOW(), password_recovery_token = ? WHERE mail = ?');
	$pdostat->bindvalue('1',$token ,PDO::PARAM_INT);
	$pdostat->bindvalue('2',$mail ,PDO::PARAM_STR);
    $pdostat->execute();
    $membreSession = $pdostat->fetch();  

			// On prépare l'envoie du courriel
			$link = 'https://www.farwest1850.eu/reinit_password.php?token='.$token;
			$to = $_POST['mail'];
			$subject = 'Réinitialisation du mot de passe';
			$message = '<h1>Réinitialisation de votre mot de passe</h1><p>Pour réinitialiser votre mot de passe, veuillez suivre ce lien : <a href="'.$link.'">'.$link.'</a></p>';
 
			// On défini les entêtes requis
			$header = [];
			$headers[] = 'MIME-Version: 1.0';
			$headers[] = 'Content-type: text/html; charset=iso-8859-1';
			$headers[] = 'To: '.$to.' <'.$to.'>';
			$headers[] = 'farwest1850.eu<[email protected].>';
 
			// On envoie le courriel
			mail($to, $subject, $message, implode("\r\n", $headers));
 
			$msg = '<div style="color: green;">Un courriel a été envoyé. Veuillez vérifier votre boîte aux lettres de messagerie.</div>';
		} else {	// Si ca n'est pas associé à un compte
			$msg = '<div style="color: red;">Cette adresse courriel n\'a pas été trouvée dans la base de données.</div>';
		}
	} else {	// Si le formulaire n'est pas correctement rempli
		$msg = '<div style="color: red;">Veuillez spécifier une adresse courriel valide.</div>';
	}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>mot de passe oublié</title>
<style type="text/css">
body {
color:black;
background-color:white;
background-image:url(images/fond1.jpg);
background-attachment:fixed;
}
 a  {
text-decoration: none;
color: black;
 }
</style>
</head>
<body>
<br><br><br>
<center>
<b>RÉINITIALISATION DU MOT DE PASSE</b>
<br>
<?php echo $msg; ?>
<br><br>
<form action="" method="post">
	<label>Votre adresse courriel : 
	<br><br><input type="text" name="mail" value="" /></label>
	<br><br>
	<button type="submit">ENVOYER</button>
</form>
</body>
</center>
</html>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

15 févr. 2022, 09:51

Et ton debugage a donné quoi ?


Tu as testé sur une autre adresse email de réception (d'un autre fournisseur de mail) ?
Tu as testé un script PHP avec uniquement un appel à la fonction mail() et les paramètres les plus minimalistes possibles ?
Si ça ne marche pas non plus, met l'exemple #3 de la documentation PHP dans un script tout seul :
https://www.php.net/manual/fr/function.mail.php
Si cet exemple ne fonctionne pas non plus => contacte ton hébergeur
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 345 Messages

15 févr. 2022, 11:01

j'ai testé avec l'exemple demandé et l'email arrive bien. J'ai donc modifié la partie headers ainsi:
			// On défini les entêtes requis
			$headers = array(
            'From' => 'farwest1850.eu<[email protected].>',
            'X-Mailer' => 'PHP/' . phpversion()
             );


Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

15 févr. 2022, 13:59

Effectivement, il te manquait le "From:" sur cette ligne là (je ne l'avais pas vu avant également, d'où l'utilité d'avancer dans le debuggage) :
      $headers[] = 'farwest1850.eu<[email protected].>';
Quand tout le reste a échoué, lisez le mode d'emploi...