Bonjour à tous,
j'ai suivi le tuto du site concernant la gestion d'un espace membre.

Tout marche niquel, seul souci, j'ai eu quelques retours d'utilisateurs qui me disaient ne pas avoir reçu de mail de confirmation.

Bien évidemment j'ai demander à vérifier les spams et autres mais d'après certains retours il n'ya rien.

Le cas est très rare.
On va dire 5 sur 200 inscriptions.

Je me demandais donc si cela était une erreur dans le code ou si c'était les navigateurs ou même l'hébergeur qui pouvais faire une erreur et donc oublier l'envois du mail.
Dernière solution, serait que l'utilisateur ne maitrise pas l'outil informatique et donc est un peu perdu.

Quelqu'un aurait-il déja eu ce cas ? Si oui, quelle était votre solution ?

Merci d'avance.

4 réponses


Première chose à faire et à toujours faire : regarder les logs.
De plus tu nous dis que tu as suivit tel tutoriel, nous ne connaissons pas tous les tuto avec le code.

As tu demander qu'elle mailer ils utilisent genre Gmail etc.
Peut être que ton service ou ta regex ne fonctionne que pour Gmail, Yahoo etc et pas les autres.
Pour réussir à corriger ce bug il faudrait que tu arrive à reproduire toi même l'erreur sinon cela risque d'être compliqué de le résoudre

Nouchi35
Auteur

J'ai vérifier rapidement car ils sont quand même inscrit sur ma base de donné.
Dans certains cas c'étaient des hotmail ou yahoo et j'utilise moi même hotmail et yahoo et avec moi je les reçois bien.

Donc je ne pense pas que ce soir au niveau du mailer.

Je me disais que peut être ils sont pas doués :p
Comme les cas sont très rare.

Mais du coup pour ne pas leur dire qu'ils sont peut être pas doués je voulais trouver la solution pour les aider.
Mais comme ils ne maitrisent pas tout je ne sais pas trop comment les guider.
Car ça se trouve c'est dans leurs spams mais ils ne savent pas ou ça se trouve ou non pas envie de chercher.
Donc pour ne pas paraitre lourd et les relancer en leurs diusant de "bien" revérifier et ou si besoin me demander ou ça se trouve, car c'est un peu les prendre pour des noobs , je ne vois pas d'ou ça peut venir.

Voila mon code, peut être que ça peut vous aider :

<?php require 'includes/config_index.php'; ?>
<?php
require_once 'includes/function_register.php';
if(!empty($_POST)){

$errors = array();

if(empty($_POST['nom']) || !preg_match('/^[a-zA-Z0-9_]+$/', $_POST['nom'])){
    $errors['nom'] = "<font color='red'>Votre nom n'est pas valide</font>";
} 

if(empty($_POST['prenom']) || !preg_match('/^[a-zA-Z0-9_]+$/', $_POST['prenom'])){
    $errors['prenom'] = "<font color='red'>Votre prénom n'est pas valide</font>";
}

if(empty($_POST['age'])){
    $errors['age'] = "<font color='red'>Votre date de naissance n'est pas valide</font>";
}

if(empty($_POST['club'])){
    $errors['club'] = "<font color='red'>Votre club n'est pas valide</font>";
}

if(empty($_POST['categorie'])){
    $errors['categorie'] = "<font color='red'>Votre catégorie n'est pas valide</font>";
}

    if(empty($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
    $errors['email'] = "<font color='red'>Votre email n'est pas valide</font>";
} else{
    $req = $pdo->prepare('SELECT id FROM Membres WHERE email = ?');
    $req->execute([$_POST['email']]);
    $user = $req->fetch();
    if($user){
        $errors['email'] = '<font color="red">Cet email est déja utilisé</font>';
    }
}

if(empty($_POST['tel'])){
    $errors['tel'] = "<font color='red'>Votre numéro de téléphone n'est pas valide</font>";
}

if(empty($_POST['username']) || !preg_match('/^[a-zA-Z0-9_]+$/', $_POST['username'])){
    $errors['username'] = "<font color='red'>Votre pseudo n'est pas valide</font>";
} else{
    $req = $pdo->prepare('SELECT id FROM Membres WHERE username = ?');
    $req->execute([$_POST['username']]);
    $user = $req->fetch();
    if($user){
        $errors['username'] = '<font color="red">Ce pseudo est déja utilisé</font>';
    }
}

if(empty($_POST['password']) || $_POST['password'] !=$_POST['password_confirm']){
    $errors['password'] = "<font color='red'>Votre mot de passe n'est pas valide ou ne correspondent pas</font>";
}

if(empty($errors)){

// On enregistre les informations dans la base de données 
$req = $pdo->prepare("INSERT INTO Membres SET nom = ?, prenom = ?, age = ?, club = ?,  categorie = ?, email = ?, tel = ?, username = ?, password = ?, confirmation_token = ?");
// On ne sauvegardera pas le mot de passe en clair dans la base mais plutôt un hash
$password = password_hash($_POST['password'], PASSWORD_BCRYPT);
// On génère le token qui servira à la validation du compte 
$token = uniqid(rand(), true);
$req->execute([$_POST['nom'], $_POST['prenom'], $_POST['age'], $_POST['club'], $_POST['categorie'], $_POST['email'],  $_POST['tel'], $_POST['username'], $password, $token]);
$user_id = $pdo->lastInsertId();
// On envoit l'email de confirmation
$email = ($_POST['email']);
    // Adresse email du destinataire
    $destinataire = $email;

    // Titre de l'email
    $sujet = 'Confirmation de votre compte';

    // Contenu du message de l'email
    $message = "<p>Afin de valider votre compte merci de cliquer sur ce lien</p><br/>
    <p><a href='http://www.cdbf.fr/confirm.php?id=$user_id&token=$token'>Valider votre compte en cliquant ici</a></p><br/>
    <p>Ne répondez pas à ce mail.</p><br/>
    <p>www.cdbf.fr</p>";

    // Pour envoyer un email HTML, l'en-tête Content-type doit être défini

    $headers = 'From: noreply@cdbf.fr' . "\r\n" .
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=UTF-8\r\n";                       
    $headers .='X-Mailer: PHP/' . phpversion();

    // Fonction principale qui envoi l'email
    mail($destinataire, $sujet, $message, $headers);
// On redirige l'utilisateur vers la page de login avec un message flash

    // Adresse email du destinataire
    $destinataire2 = 'cdbf.communication@cdbf.fr';

    // Titre de l'email
    $sujet2 = "Nouvel enregistrement";

    // Contenu du message de l'email
    $message2 = ($_POST['prenom'])." ". ($_POST['nom'])." s'est enregistré";

    // Pour envoyer un email HTML, l'en-tête Content-type doit être défini

    $headers2 = 'From: noreply@cdbf.fr' . "\r\n" .
    $headers2 .= "MIME-Version: 1.0\r\n";
    $headers2 .= "Content-type: text/html; charset=UTF-8\r\n";  
    $headers2 .='X-Mailer: PHP/' . phpversion();

    // Fonction principale qui envoi l'email
    mail($destinataire2, $sujet2, $message2, $headers2);
// On redirige l'utilisateur vers la page de login avec un message flash
$_SESSION['flash']['success'] = 'Un email de confirmation vous a été envoyé sur votre boîte mail.<br/> Merci de vérifier votre boîte mail pour valider votre compte.<br/> Verifiez dans vos spams si besoin.';
header('Location: login.php');
exit();

}
}

?>

Bonjour,
Tu pourrais tester si mail() ne te renvoie pas une erreur. Et si c'est le cas, afficher un message d'erreur et/ou inscrire l'erreur dans un fichier.