PHP Mail - Form de contact fonctionne sur Chrome mais pas sur Firefox et Edge

Petit nouveau ! | 9 Messages

04 nov. 2018, 19:50

Bonsoir,

Comme indiqué dans le titre, mon form de contact fonctionne sur Chrome, mais pas sur Firefox ni Edge et je ne trouve pas ce qui cloche.
Sur Chrome, si j'envoie un message, je le reçois, mais sur Firefox ou Edge, ça m'indique "Une erreur s'est produite. Votre email n'a pas été envoyé."
Est-ce que vous voyez d'où provient mon erreur ?

Merci.
ini_set('error_reporting', E_ALL);<br>ini_set('SMTP','smtp.sfr.fr');
 ini_set("sendmail_from","[email protected]");
 
    if (!empty($_POST))
    {
         
         
      $valid = true;
      $tousleschamps = 'Veuillez remplir tous les champs';
                         
    if (!empty($_POST['societe'])) {$societe = $_POST['societe'];}
    else { $valid= false; $erreursociete = 'Société ?';}   
 
    if (!empty($_POST['nom']))  {$nom = $_POST['nom'];}  
        else{ $valid= false; $erreurnom = 'Vos nom et prénom ?';}  
         
    if (!empty($_POST['tel']))  {$tel = $_POST['tel'];}
        else { $valid= false; $erreurtel = 'Téléphone ?';}
                       
    if (!preg_match(" '[0-9 -]{10,16}' ", $tel))  { $valid= false; $erreurtel = 'Numéro incorrect';}
    if (preg_match(" '[a-zA-Z]' ", $tel))  { $valid= false; $erreurtel = 'Numéro incorrect';}
    // if (!preg_match(" '^(?:09|\+?63)(?:\d(?:-)?){9,10}$'", $tel))  { $valid= false; $erreurtel = 'Numéro incorrect';}   
         
     
    if (!empty($_POST['lettre_electro']))  {$lettre_electro = $_POST['lettre_electro'];}
    else   { $valid= false; $erreurmail = 'Votre e-mail ?';}
         
         
    if (!empty($_POST['lettre_electro']) && !preg_match("#^[a-z0-9\-_.]+@[a-z0-9\-_.]+\.[a-z]{2,3}$#", $_POST['lettre_electro'])) {$valid=false; $erreuremail = 'Erreur de frappe ?';}
 
    if (!empty($_POST['mensaje'])) {$mensaje = $_POST['mensaje'];}
    else { $valid= false; $erreurmessage = 'Dites-moi ?';}
         
    if (!empty($mensaje) && strlen($mensaje)<10) {$valid= false; $erreurmensaje = 'Pas de message ?' ;}
    if(!empty($_POST['esco_ndido']))
       {$valid =false; $error_esc ='Erreur. Si le problème persiste, veuillez nous contacter par téléphone et nous transmettre le code "error_esc" <br />Veuillez nous excuser de la gêne occasionnée '; } 
                     
    if ($valid)
       {     $tel_clean = str_replace( array( '\'', '"', ',' , ';', '<', '>' ), ' ', $tel);
            
             $to= "[email protected]";
   
             $from = "$nom <$lettre_electro>";
             $subject = "Mail depuis ....";
              
             $message = '<!DOCTYPE html><html><head><meta charset="UTF-8">
                         <title>Mail depuis monsite</title></head>                      
                         <body style="margin:0px; font-family:Tahoma, Geneva, sans-serif;">                       
                                                    
                          <div style="padding:24px; font-size:17px;">
                           DE :  '.$nom.', <br /> SOCIETE : '.$societe.', <br /> TELEPHONE : '.$tel_clean.', EMAIL : '.$lettre_electro.' <br /><br /> MESSAGE : '.$mensaje.' ";
                          </div> </body></html>';
                           
               $subject = utf8_decode($subject);
               $subject.=mb_encode_mimeheader($subject,"UTF-8");      
               $message.= "Content-Transfer-Encoding: 8bit\n";   
                           
               $headers = "From: $from \n";
               $headers .= "MIME-Version: 1.0\n";
               $headers .= "Content-type: text/html; charset=iso-8859-1\n";
                
              
       
          if (mail($to, $subject, utf8_decode($message), $headers) )
             {$erreur = 'Merci, votre message a bien été envoyé.<br />Je vous recontacterai dans les prochaines heures.';
              unset ($nom);
              unset ($societe);
              unset ($tel);
              unset ($lettre_electro);
             
              unset ($mensaje);
              unset ($message);
             }
             else {$erreur= ' Une erreur s\'est produite. Votre email n\'a pas été envoyé. <br /> Veuillez me contacter par téléphone ou à l\'adresse indiquée. Merci.';}
           } 
     
}
 
?>
<!DOCTYPE html>
<html lang="FR">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
<meta name="viewport" content="width=device-width, initial-scale=1.0"> 
<META NAME="Robots" CONTENT="none" /> 
<title>Contact </title>
 
 
<link rel="icon" type="image/png" href="core/img/favicon_Marina.png" />
<link rel="stylesheet" href="core/bootstrap.min.css"  /> 
<link rel="stylesheet" href="core/newboot_min.css?=<?php echo time(); ?>"  />
<link rel="stylesheet" href="core/js/Hover-master/css/hover.css" media="all">
<link rel="stylesheet" href="core/contact.css?=<?php echo time(); ?>"  />
<script type="text/javascript" src="core/js/jquery-3.3.1.min.js" ></script>
<script type="text/javascript" src="core/_bootstrap-3.3.7-dist/bootstrap-3.3.7-dist/js/bootstrap.min.js" > </script>
<link rel="stylesheet" href="core/accueil.css" />
<!--[if lt IE 9]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
</head>
<body >
 <?php include('includes/menu_contact_active.php'); ?>
    

<div class="container-fluid" >
   
   
 <section id="contact" class="animatedParent container" >
    <div id="contact_container" class='animated swing'>
 
    <div class="titres_white"> <h1> <b>CONTACT</b><br /> </h1> </div>
 
 
<div class="form_contact" >
        <form method="post" id="form_contact" action="#">
         
 
         
        <label for="societe" id="empresa" class="etiquette"> Société:</label>
        <input type="text" id="societe" class="champ" name="societe" size="35" maxlength="100" tabindex="10" value="<?php if (isset($societe)) echo $societe; ?>" />
        <span class="error_message"> <?php if(isset($erreursociete)) echo $erreursociete; ?> </span>
        <br />  
         
        <label for="nom" id="apellidos" class="etiquette"> Contact:</label>
        <input type="text" id="nom" class="champ" name="nom" size="35" maxlength="100"  tabindex="20" value="<?php if(isset ($nom)) echo $nom; ?>" />
        <span class="error_message"> <?php if(isset($erreurnom)) echo $erreurnom; ?> </span>
        <br />
         
         
        <label for="tel" id="telf" class="etiquette"> Téléphone:</label>
        <input type="text" id="tel" class="champ" name="tel" size="35" maxlength="100" placeholder="" tabindex="40" value="<?php if (isset($tel)) echo $tel; ?>" />
        <span class="error_message"> <?php if(isset($erreurtel)) echo $erreurtel; ?> </span>
        <br />
         
        <label for="email" id="mail" class="etiquette"> E-mail:</label>
        <input type="text" id="email" class="champ"  name="lettre_electro" size="35" maxlength="100"  tabindex="50" value="<?php if(isset($lettre_electro)) echo $lettre_electro; ?>" />
        <span class="error_message"> <?php if(isset($erreurmail)) echo $erreurmail; if(isset($erreuremail)) echo $erreuremail; ?> </span>
        <br /> <br />
         
        <input type="hidden" name="esco_ndido" value="" />
      
         
        <label for="mensaje" id="mess" class="etiquette"> Message: </label>
        <textarea id="mensaje" class="champ" name="mensaje" cols="50" rows="11" maxlength="2500" tabindex="68" > <?php if(isset($mensaje)) echo $mensaje; ?> </textarea>
        <span class="error_message">  <?php if(isset($erreurmessage)) echo $erreurmessage; ?> </span>
        <span class="error_message">  <?php if (isset($erreurmensaje)) echo $erreurmensaje; ?> </span>
        <br />
        <br />
        <br />
        <br />
 
        <input type="submit" value="Envoyer" class="myBTN" id="submit" name="submit" tabindex="100" />
        <div id="envoi_result"> <span class="erreur"> <br /> <br /> <?php if(isset($erreur)) {echo  $erreur ;} ?> </span>  </div>
        </form>
 
</div> <!-- END form_contact -->
</div> <!-- END contact_container -->
</section>
</div> <!-- END container-fluid -->

Eléphant du PHP | 130 Messages

06 nov. 2018, 17:42

Le message d'erreur provient du fait que la condition suivante n'est pas résolue :

mail($to, $subject, utf8_decode($message), $headers)

Est-ce que tu peux nous mettre les messages dans les logs que tu as lors de l'erreur ?
As-tu affiché la valeur des différentes variables :
- $to
- $subject
- $message
- $header

Est-ce que ton fichier est bien encodé ? Vérifie également la sortie de utf8_decode($message).

Petit nouveau ! | 9 Messages

06 nov. 2018, 22:29

Bonsoir brnv8nam,

Merci pour ta réponse. Ca faisait des mois que je n'avais plus mis le nez dans le PHP....(je comprends pourquoi ! :mrgreen: )....... donc merci pour les pistes. Ceci-dit, pas d'avancement.............. :x

La condition n'est pas résolue... Oui mais pourquoi ? Toutes mes vars sont ok, toutes toutes toutes ! J'ai exploré toutes les pistes que tu m'as donné, et tout renvoie les contents attendus, sauf que le send mail bloque du côté de Firefox et Edge, et je n'ai aucun code d'erreur à soumettre...

Je te confirme que utf8_decode($message) est ok, et si je le commente //, ça continue de fonctionner avec Chrome, mais toujours pas sur FF.

Quoique côté $headers, j'y connais rien...
$headers = "From: $from \n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\n";

Le problème vient peut-être de là.. Que devrais-je modifier ? J'ai lu r/n/ mais ça ne change rien...


Je continue de chercher, mais sI t'as d'autres pistes, je prends. Merci beaucoup.... :) Bonne soirée

Petit nouveau ! | 9 Messages

06 nov. 2018, 22:34

LOL ---------------- RESOLU !!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Petit nouveau ! | 9 Messages

06 nov. 2018, 22:38

Le problème venait effectivement des headers auxquels j'ai tout simplement supprimé : le /n.
 $headers = "From: $from \n";
 $headers .= "MIME-Version: 1.0\n";
 $headers .= "Content-type: text/html; charset=iso-8859-1\n";			   

Merci benv8nam pour les pistes de recherche, tu m'as bien aidée puisque ça faisait 1 an ou plus que je ne touchais plus au PHP. Merci ;)

Petit nouveau ! | 9 Messages

06 nov. 2018, 22:42

Je n'arrive pas à passer le sujet en résolu.... Désolée, si un admin peut le faire à ma place ? ;) Merci, tschuss !

Petit nouveau ! | 9 Messages

06 nov. 2018, 23:15

humhum. SI avoir supprimé mes /n, permet à FF et Edge d'envoyer les mails (c'est tout ce que je demandais), le problème c'est que ça m'envoie tout ça :
<!DOCTYPE html><html><head><meta charset="UTF-8">
                         <title>Mail depuis monsite</title></head>                      
                         <body style="margin:0px; font-family:Tahoma, Geneva, sans-serif;">                                                  
                          <div style="padding:24px; font-size:17px;">
                           DE :  '.$nom.', <br /> SOCIETE : '.$societe.', <br /> TELEPHONE : '.$tel_clean.', EMAIL : '.$lettre_electro.' <br /><br /> MESSAGE : '.$mensaje.' "; </div> </body></html>';
au lieu de juste de :
DE: $nom,
SOCIETE: $societe
etc...

Dommage ! Je suis déjà contente mais... quelle serait la meilleure alternative ? Merci !!!!!!!!!!!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

07 nov. 2018, 10:32

Si tu n'a pas besoin de code HTML particulièrement dans ton mail, contente toi de faire du texte simple, ça évite + facilement les antispam (et vu que c'est un mail interne si je comprends bien, le texte simple me semble plus logique).

Reprends les exemples 2 ou 5 de la doc pour vérifier que tu fais tout correctement, c'est le plus sûr : https://php.net/mail

Et attention, à ne pas confondre \n et /n car dans tes messages précédents parfois tu intervertis les 2
Quand tout le reste a échoué, lisez le mode d'emploi...