Bonjour,

Voila je rencontre un petit problème avec mon code.

Je cherche à relier les formulaires de contact de la page contact de mon site à mon adresse email de telle sorte que je reçoive directement tous les messages postés par mes clients directement dans ma boîte email.
J'ai élaboré à cet effet deux pages: la page contact.php et la page traitement_contact.php dont les codes suivent ci-dessous:

Page contact.php

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1">

   <div class="row">
    <!-- contact form -->
    <form action="traitement_contact.php" method="post" class="tm-contact-form">
     <div class="col-lg-6 col-md-6 tm-contact-form-input">
      <div class="form-group">
       <input type="text" name="nom" class="form-control" placeholder="NOM" />
      </div>
      <div class="form-group">
       <input type="email" name="email" class="form-control" placeholder="EMAIL" />
      </div>
      <div class="form-group">
       <input type="text"  name="objet" class="form-control" placeholder="OBJET" />
      </div>
      <div class="form-group">
       <textarea name="message" class="form-control" rows="6" placeholder="MESSAGE"></textarea>
      </div>
      <div class="form-group">
       <button class="tm-submit-btn" type="submit" name="envoyer">Envoyer</button> 
      </div>               
     </div>
    </form>
   </div>   
  </div>
 </section> 
</body>
</html>

Ensuite voici le code de la page traitement_contact.php

<?php
/*
    ********************************************************************************************
    CONFIGURATION
    ********************************************************************************************
*/
//<pre class="code inline inline-code" data-mode="php">mail($email_destinataire, $objet, $message, $headers)</pre>
 //a réussi, le mail a été accepté pour livraison.
// destinataire est votre adresse mail. Pour envoyer à plusieurs à la fois, séparez-les par une virgule   dgmictp@yahoo.fr
$destinataire = 'adresse1@yahoo.fr, adresse2@gmail.com';

// copie ? (envoie une copie au visiteur)
$copie = 'oui'; // 'oui' ou 'non'

// Messages de confirmation du mail
$message_envoye = "Votre message nous est bien parvenu !";
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";

// Messages d'erreur du formulaire
$message_erreur_formulaire = "Vous devez d'abord <a href=\"contact.php\">envoyer le formulaire</a>.";
$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";

/*
    ********************************************************************************************
    FIN DE LA CONFIGURATION
    ********************************************************************************************
*/

// on teste si le formulaire a été soumis
if (!isset($_POST['envoyer']))
{
    // formulaire non envoyé
    echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
}
else
{
    /*
     * cette fonction sert à nettoyer et enregistrer un texte
     */
    function Rec($text)
    {
        $text = htmlspecialchars(trim($text), ENT_QUOTES);
        if (1 === get_magic_quotes_gpc())
        {
            $text = stripslashes($text);
        }

        $text = nl2br($text);
        return $text;
    };

    /*
     * Cette fonction sert à vérifier la syntaxe d'un email
     */
    function IsEmail($email)
    {
        $value = preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email);
        return (($value === 0) || ($value === false)) ? false : true;
    }

    // formulaire envoyé, on récupère tous les champs.
    $nom     = (isset($_POST['nom']))     ? Rec($_POST['nom'])     : '';
    $email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : '';
    $objet   = (isset($_POST['objet']))   ? Rec($_POST['objet'])   : '';
    $message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';

    // On va vérifier les variables et l'email ...
    $email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré

    if (($nom != '') && ($email != '') && ($objet != '') && ($message != ''))
    {
        // les 4 variables sont remplies, on génère puis envoie le mail
        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'From:'.$nom.' <'.$email.'>' . "\r\n" .
                'Reply-To:'.$email. "\r\n" .
                'Content-Type: text/plain; charset="utf-8"; DelSp="Yes"; format=flowed '."\r\n" .
                'Content-Disposition: inline'. "\r\n" .
                'Content-Transfer-Encoding: 7bit'." \r\n" .
                'X-Mailer:PHP/'.phpversion();

        // envoyer une copie au visiteur ?
        if ($copie == 'oui')
        {
            $cible = $destinataire.';'.$email;
        }
        else
        {
            $cible = $destinataire;
        };

        // Remplacement de certains caractères spéciaux
        $message = str_replace("&#039;","'",$message);
        $message = str_replace("&#8217;","'",$message);
        //$message = str_replace("&quot;",'"',$message);
        $message = str_replace('<br>','',$message);
        $message = str_replace('<br />','',$message);
        $message = str_replace("&lt;","<",$message);
        $message = str_replace("&gt;",">",$message);
        $message = str_replace("&amp;","&",$message);

        // Envoi du mail
        $num_emails = 0;
        $tmp = explode(';', $cible);
        foreach($tmp as $email_destinataire)
        {
            if (mail($email_destinataire, $objet, $message, $headers))
                $num_emails++;
        }

        if ((($copie == 'oui') && ($num_emails == 2)) || (($copie == 'non') && ($num_emails == 1)))
        {
            echo '<p>'.$message_envoye.'</p>';
        }
        else
        {
            echo '<p>'.$message_non_envoye.'</p>';
        };
    }
    else
    {
        // une des 3 variables (ou plus) est vide ...
        echo '<p>'.$message_formulaire_invalide.' <a href="contact.php">Retour au formulaire</a></p>'."\n";
    };
}; // fin du if (!isset($_POST['envoi']))
?>

Je veux recevoir directement tous les messages postés par mes clients ou visiteurs directement dans la boîte de reception de mon mail et non dans le dossier spam.

Mon code ne marche pas. Auparavant je recevais les messages dans le dossier spam, mais ce n'est plus le cas. On me dis qu'il ya une erreur de serveur.
Après l'envoi du message, on me dis que le message est bien parti mais je ne le voit pas dans ma boîte lorsque je me connecte.

Veuillez m'aider pour la correction du code ou si vous pouvez me donner un bon code qui marche très bien et qui n'envois pas les messages dans le dossier spam, car celui m'envoyait les messages dans le dossier spam lorsqu'il marchait, mais il ne marche même plus.
Merci d'avance pour votre aide!

10 réponses


Bonjour.
Ce serait bien que tu corriges l'indentation de ton deuxième bloc de code (PHP).

Busima
Auteur

Merci Lartak, j'ai fais l'indentation. Merci d'avance pour l'aide.

Est-ce que tu as un minimum de connaissance concernant PHP ?
Je n'en ai pas l'impression, car le fait que du code PHP se situe sur la même ligne que des commentaires et à la suite de ces commentaires ne semble pas te faire tilter à comprendre le problème.
De plus qu'il y a des lignes de codes totalement inutile, du genre :

$message = str_replace("'","'",$message);// Totalement inutile ²
$message = str_replace("’","'",$message);
$message = str_replace(""",'"',$message);// Incorrect, mettre 3 fois à la suite des doubles quotes devraient  te renvoyer une erreur  ça se voit d'ailleur au changement de couleur syntaxique ici
$message = str_replace('<br>','',$message);  
$message = str_replace('<br />','',$message);  
$message = str_replace("<","<",$message); // Totalement inutile ²
$message = str_replace(">",">",$message); // Totalement inutile ²
$message = str_replace("&","&",$message); // Totalement inutile ²

²: Remplacer un caractère par lui même n'a aucun intéret et ne fait qu'augmenter la charge de PHP

Hello,
A quel moment définis-tu ta variable $desinataire? Si elle est vide, forcément tu ne recevras pas de mail.
Et fais attention à échapper certains caractères.

$message = str_replace(""",'"',$message); 

Cordialement,
TD

Busima
Auteur

Merci pour vos remarques. A vrai dire Lartak, je suis nouveau en php. Je ne vois pas vraiment l'erreur, si vous pouvez me préciser l'erreur, ça va m'aider. Merci d'avance à vous tous!

je suis nouveau en php. Je ne vois pas vraiment l'erreur, si vous pouvez me préciser l'erreur, ça va m'aider.

Vu ton niveau, nous ne pourrons pas t'aider efficacement en te répondant simplement à ton sujet, il est donc nécessaire que tu apprennes le PHP depuis le début et pour celà il y a sur le site différents tutoriels ainsi que des formations qui pourront t'aider.
Car même si nous essayons de t'aider pour le code actuel, tu devras par la suite venir nous demander à nouveau de l'aide lorsque tu voudras implémenter d'autres portions de codes, ce qui peut être largement évité si tu apprends par toi même le PHP.
Sinon, juste un petit indice, du code PHP qui se situe dans la même ligne que du commentaire PHP n'est pas interprété et n'est donc pas fonctionnel.

Busima
Auteur

Je pense que j'ai maintenant corrigé et que vous pouvez bien voir mon code maintenant maître Lartak. Jettez encore un coup d'oeil svp.

Il y a toujours du code PHP dans les commentaires, ainsi que des lignes que j'avais mentionné comme inutile et des ; à des endroits où ils ne sont pas censés être.

Busima
Auteur

Voici le code final...

Busima
Auteur

C'est le code qui est dans mon éditeur actuellement en ligne.