Bonjour à tous.

Pour un site que je développe je dois réaliser un espace membre avec page d'inscription et validation par mail (code d'activation). L'inscription se passe sans soucis, le membre s'enregistre dans la base de donnée avec tous les champs mais l'envoi de l'email de validation ne se fait pas et je ne sais pas pourquoi. Je précise tout de même que je ne pense pas avoir fait d'erreur dans mon code vu que j'ai repris sensiblement l'envoi d'email du formulaire de contact que j'ai réalisé (qui lui marche sans soucis). Donc si quelqu'un a une idée d'où pourrait venir l'erreur de mon code :/

PS : Je tiens à préciser que j'utilise la même page pour l'inscription et pour l'édition du profil avec pour vérifications des variables de session.

Voici le bout de code d'envoi de l'email :

if( empty($error) )
    {
        //  Le membre est nouveau, on le crée
        if( $_SESSION'Auth']'u_id'] == GUEST )
        {
            $sql = "INSERT INTO " . PREFIX . "users SET 
                                u_name=:name,
                                u_surname=:surname,
                                u_email=:email,
                                u_password=:password,
                                u_auth=:auth,
                                u_time=:time,
                                u_society=:society,
                                u_gerant_name=:boss,
                                u_phone=:phone,
                                u_fax=:fax,
                                u_adress=:adress,
                                u_postal=:cp,
                                u_city=:city,
                                u_country=:country,
                                u_token=:token";
        }
        else
        {
            //  Sinon on met à jour son profil
            $sql = "UPDATE " . PREFIX . "users SET 
                                u_name=:name,
                                u_surname=:surname,
                                u_email=:email,
                                u_password=:password,
                                u_society=:society,
                                u_gerant_name=:boss,
                                u_phone=:phone,
                                u_fax=:fax,
                                u_adress=:adress,
                                u_postal=:cp,
                                u_city=:city,
                                u_country=:country";    
        }   
        $query = array(
            'name' =>   $u_name,
            'surname' =>    $u_surname,
            'email' =>  $u_email,
            'password' =>   sha1($u_password),
            'society' =>    $u_society,
            'boss' =>   $u_gerant_name,
            'phone' =>  $u_phone,
            'fax' =>    $u_fax,
            'adress' => $u_adress,
            'cp' => $u_postal,
            'city' =>   $u_city,
            'country' =>    $u_country,
        );
        //  Champs propres à l'inscription
        if( $_SESSION'Auth']'u_id'] == GUEST )
        {
            $query] = array(
                'auth' =>   USER,
                'time' =>   time(),
                'token' =>  $token,
            );
        }
        $req = $db->prepare($sql);
        if( $req->execute($query) )
        {
            if($_SESSION'Auth']'u_id'] == GUEST)
            {
                //  On envoit également un email de vérification
                $topic = 'Account activation';
                $body = '
                    Hello, please click on the following link to activate your personnal account.<br /><br />
                    <a href="' . WEBSITE . 'activate.php?token=' . $token . '&email=' . $to . '">Click here</a>';
                $header = "MIME-Version: 1.0\r\n";
                $header .= "Content-type: text/html; charset=UTF-8" . "\r\n";
                $header .= "To: " . $u_name . "<" . $u_email . ">" . "\r\n";
                $header .= "From: Deconuts <deconutsitems.com>" . "\r\n";
                $header .= "Reply-To: Deconuts <deconuts@sfr.fr>" . "\r\n";
                $header .= "X-Mailer: PHP/" . phpversion() . "\r\n";
                //  On prépare un joli message en html
                ob_start();
                ?>
                <html lang="fr">
                    <head>
                        <meta charset="utf-8">
                        <meta http-equiv="X-UA-Compatible" content="IE=edge">
                        <meta name="viewport" content="width=device-width, initial-scale=1">
                        <title>Account validation</title>
                        <!-- Bootstrap core CSS -->
                        <link href="http://alexandre-ribes.fr/galerie/css/bootstrap.min.css" rel="stylesheet" />
                        <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
                        <!--[if lt IE 9]>
                          <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
                          <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
                        <![endif]-->
                        <script type="text/css">
                            /* Sticky footer styles
                            -------------------------------------------------- */
                            html {
                              position: relative;
                              min-height: 100%;
                            }
                            body {
                              /* Margin bottom by footer height */
                              margin-bottom: 60px;
                            }
                            .footer {
                              position: absolute;
                              bottom: 0;
                              width: 100%;
                              /* Set the fixed height of the footer here */
                              height: 60px;
                              background-color: #f5f5f5;
                            }

                            /* Custom page CSS
                            -------------------------------------------------- */
                            /* Not required for template or sticky footer method. */
                            .container {
                              width: auto;
                              max-width: 680px;
                              padding: 0 15px;
                            }
                            .container .text-muted {
                              margin: 20px 0;
                            }
                        </script>   
                    </head>
                    <body>
                        <div class="container">
                            <div class="page-header">
                                <h1>Account Activation</h1>
                            </div>
                            <div class="well"><p><?= $body; ?></p></div>    
                        </div>
                        <div class="footer">
                            <div class="container">
                                <p class="text-muted">Message envoyé vie la formulaire de contact de Deconuts</p>
                            </div>
                        </div>
                    </body>
                </html>     
                <?php
                $content = ob_get_clean();
                mail($u_email, $topic, $content, $header);
                setFlash('Congratulations, you are now registered as ' . stripslashes($u_name));
                header('Location:index.php');
                die();
            }
            else
            {
                setFlash('Congratulations, yout account has been updated');
                header('Location:profile.php');
                die();
            }   
        }
        else
        {
            setFlash('Sorry, an error as occured. Please accept our apologies.');
            header('Location:loginphp');
            die();
        }
    }

2 réponses


Alexandre #lbac
Auteur
Réponse acceptée

Bonjour,

C'était mes variables de sessions qui bloquaient (je ne sais pas pourquoi), j'ai un petit peu remanié le code et du coup c'est bon. De toute façon à chaque fois que je demande de l'aide après avoir passé quelques heures à chercher je finis par trouver la réponse ^^

Merci à vous dans tous les cas :)

Si tu fais un echo de mail($u_email, $topic, $content, $header); il te retourne true ou false ?