Problème d'envoi de mail avec formulaire Ajax +Json

Problème d'envoi de mail avec formulaire Ajax +Json - PHP - Programmation

Marsh Posté le 28-12-2014 à 19:18:13    

Bonjour,
 
ca fait quelques jours que je tourne en rond pour l'envoi de mail via formulaire (le truc basique quoi).
Mais cette fois ci j'ai rajouté de l'Ajax et Json pour l'envoi des données au server.
 
Problème: les mail de tests n'arrive plus depuis quelques jours.
Au début je pensais à un soucis de code, mais je suis de plus en plus sceptique et me demande si l'adresse ip de mon host n'est pas blacklistée, ceci dit
je n'ai aucun message d'erreur en retour, rien.
A vous de juger
 
Le code Jquery:
 

Code :
  1. <script type="text/javascript">
  2.    
  3.                 $('#contact').on('submit', function(e)
  4.                 {
  5.                     e.preventDefault();
  6.                     var error = false;
  7.                     //simple validation at client's end
  8.                     //loop through each field and we simply change border color to red for invalid fields       
  9.                     $("#contact input,#contact textarea" ).each(function(){
  10.                         $(this).css('border-color','');
  11.                         if(!$.trim($(this).val()))
  12.                         { //if this field is empty
  13.                             $(this).css('border-color','red'); //change border color to red   
  14.                             error = true; //set do not proceed flag
  15.                         }
  16.                         //check invalid email
  17.                         var email_reg = /^([w-.]+@([w-]+.)+[w-]{2,4})?$/;
  18.                         if($(this).attr("type" )=="email" && !email_reg.test($.trim($(this).val())))
  19.                         {
  20.                             $(this).css('border-color','red'); //change border color to red   
  21.                             error = true; //set do not proceed flag             
  22.                         } 
  23.                     });
  24.                     if(!error) //everything looks good! proceed...
  25.                     {
  26.                         var $this = $(this);
  27.                        
  28.                    
  29.                         $.ajax({
  30.                                 url: $this.attr('envoi_mail.php'), // Le nom du fichier indiqué dans le formulaire
  31.                                 type: $this.attr('POST'), // La méthode indiquée dans le formulaire (get ou post)
  32.                                 data: $this.serialize(), // Je sérialise les données (j'envoie toutes les valeurs présentes dans le formulaire)
  33.                                 dataType: 'json', // JSON
  34.                                 success: function(json)
  35.                                 {
  36.                                     if(json.message_sent == true)
  37.                                     {
  38.                                         $('#contact_results').show();
  39.                                         $('#contact_results').addClass('.success_message');
  40.                                         $('#contact_results').text('Mail envoyé !');
  41.                                         $("form input,form textarea" ).val('');
  42.                                     } else {
  43.                                      
  44.                                         if((json.message_sent == false) && (json.error == false) )
  45.                                         {
  46.                                             $('#contact_results').show();
  47.                                             $('#contact_results').addClass('.error_message');
  48.                                             $('#contact_results').text('Erreur lors de l'envoi n
  49.                                             de votre message: raison indéterminée');
  50.                                             $("form input,form textarea" ).val('');
  51.                                         } 
  52.                                         else
  53.                                         {
  54.                                             $('#contact_results').addClass('.error_message');
  55.                                             $('#contact_results').text('Error: les infos rentrées dans le formulaire semblent incorrectes');
  56.                                         }
  57.                                            
  58.                                     }
  59.                                 }
  60.                             });
  61.                        
  62.                                
  63.                      }
  64.                  };
  65.                    
  66.      
  67.                
  68.     </script>


Le formulaire:
 

Code :
  1. <div id="form_contact">
  2.                
  3.                    
  4.                     <div id="contact_results">
  5.                            
  6.                     </div>
  7.                
  8.                
  9.                      
  10.                      
  11.                     <form action="envoi_mail.php" id="contact" method="POST">
  12.                       <p>
  13.                           <label for="prenom" class="prenom">Prénom</label>
  14.                           <br /><input id="prenom" name="prenom" type="text" autofocus>
  15.              
  16.                       </p>
  17.                       <p>
  18.                           <label for="nom" class="nom">Nom</label>
  19.                           <br /><input id="nom" name="nom" type="text" autofocus>
  20.                      
  21.                       </p>
  22.                       <p>
  23.                           <label for="email">Email</label>
  24.                           <br /><input id="email" name="email" type="email" autofocus>
  25.                      
  26.                       </p>
  27.                       <p>
  28.                           <label for="sujet" class="sujet">Sujet</label>
  29.                           <br /><input id="sujet" name="sujet" type="text" autofocus>
  30.                        
  31.                       </p>
  32.                       <p>
  33.                           <label for="message">Message</label>
  34.                           <br /><textarea id="message" name="message" rows="10" cols="80" autofocus></textarea>
  35.                    
  36.                       </p>
  37.                       <p>
  38.                           <input type="submit" class='bouton_noir' value="Envoyer" />
  39.                       </p>
  40.                   </form>
  41.             </div><!-- end of #form_contact -->


le code PHP:
 

Code :
  1. <?php
  2.     if(isset($_POST["user_prenom"]) && isset($_POST["user_nom"])
  3.         && isset($_POST["user_email"]) && isset($_POST["user_subject"])
  4.             && isset($_POST["user_message"]))
  5.     {
  6.               // array to pass back data
  7.         $user_datas =[];
  8.         $return_infos   = [];
  9.         $to_email       = "mon adresse@yahoo.fr"; //Recipient email, Replace with own email here
  10.         $input_error    = false;
  11.         $message_sent   = false;
  12.      
  13.      
  14.         $user_datas = [
  15.             "prenom" => $_POST["user_prenom"],
  16.             "nom" =>    $_POST["user_nom"],
  17.             "email" => $_POST["user_email"],
  18.             "sujet" => $_POST["user_subject"],
  19.             "message" => $_POST["user_message"],
  20.           ];
  21.            
  22.        
  23.        
  24.         //var_dump($user_datas);
  25.         /*$user_prenom = filter_input(INPUT_POST, $_POST["user_prenom"], FILTER_SANITIZE_STRING);
  26.         $user_nom = filter_input(INPUT_POST, $_POST["user_nom"], FILTER_SANITIZE_STRING);
  27.         $user_email = filter_input(INPUT_POST, $_POST["user_email"], FILTER_SANITIZE_EMAIL);
  28.         $user_sujet = filter_input(INPUT_POST, $_POST["user_subject"], FILTER_SANITIZE_STRING);
  29.         $user_message = filter_input(INPUT_POST, $_POST["user_message"], FILTER_SANITIZE_STRING); */
  30.      
  31.        foreach($user_datas as $k => $v)
  32.        {
  33.            if(is_string($user_datas[$v]))
  34.            {
  35.                $input_error = false;
  36.            }
  37.            else
  38.            {
  39.                $input_error = true;
  40.                break;
  41.            }
  42.              
  43.        }
  44.        //var_dump($user_datas);
  45.  
  46.     // return a response ===========================================================
  47.         // if there are any errors in our errors array, return a success boolean of false
  48.         if (!($input_error))
  49.         {
  50.             $user_datas_ok=$user_datas;
  51.             $headers = 'From: '.$user_datas_ok["email"]. "rn" .
  52.                     'Reply-To: '.$to_email. "rn" .
  53.                     'X-Mailer: PHP/' .phpversion();
  54.              
  55.             if( mail($to_email, "dkdkdkdkdkdkkdkd",
  56.                 ",c,d,c,c,c,", 'HAL <HAL@hotmail.com>')) // tentative d'envoi du message   
  57.             { 
  58.                 $message_sent=true;
  59.          
  60.             }
  61.             else{
  62.              
  63.                 $message_sent=false;
  64.              
  65.             }
  66.            
  67.  
  68.         }
  69.        
  70.        
  71.        
  72.         header('Content-type: application/json;charset=utf-8');   
  73.         echo json_encode([
  74.                         'message_sent' => $message_sent,
  75.                         'error' => $input_error
  76.          ]);
  77.  
  78.   }


Voyez vous un probleme dans mon code, qui expliquerait que le message n'arrive pas  ?
 
Merci d'avance
 
Tom


---------------
collectionneur de pâtes thermiques
Reply

Marsh Posté le 28-12-2014 à 19:18:13   

Reply

Marsh Posté le 29-12-2014 à 09:18:30    

Bonjour,
 
Je pense que ton soucis viens de ta partie JS/AJAX et/ou PHP.
Tu envoie this.serialize(); mais je pense que ceci ne récupère pas le contenu de tes inputs. Un console.log sur this.serialize() s'impose.
 
Ensuite partie PHP tu fait utilise ces $_POST:
 

Code :
  1. if(isset($_POST["user_prenom"]) && isset($_POST["user_nom"])
  2.         && isset($_POST["user_email"]) && isset($_POST["user_subject"])
  3.             && isset($_POST["user_message"]))


 
Personnellement je ne vois rien avec ces noms là ( peut-être dans ton this.serialize();
 
Pour finir dans ta function ajax : success ( tu devrait enlever tout les if pour avoir l'affiche des erreurs php pour débuguer )
 
et aussi mettre la function ajax error
 

Code :
  1. error : function(rep){
  2. }


 
ainsi en qu'a d'erreur de ta requête tu peux déboguer aussi.
 
En espérant que ça t'aiguille vers la solution à ton problème.


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 30-12-2014 à 15:58:26    

Bonjour,
 
Je n'ai pas vraiment regardé ton code mai ça me fait penser à ce sujet :
 
http://forum.hardware.fr/hfr/Progr [...] 2920_1.htm

Reply

Marsh Posté le 30-12-2014 à 16:20:28    

Comme le faisait remarquer OrcusZ, je doute fort que ton code ait marché avant à la vue des noms de variables dans les isset($POST['...']) :/
 
Ca me fait plus penser à qq'un qui a récupérer des boutons de code par-ci par-là et a essayé de les assembler sans les comprendre
 
Dans ton php, si tu fais un print_r($_POST), tu vois quoi ?
 
Edit : appréciation toute personnelle : je ne vois vraiment pas l'utilité d'ajax pour un simple formulaire de contact :/


Message édité par rufo le 30-12-2014 à 16:21:26

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 31-12-2014 à 10:26:50    

Allélouia ca marche enfin.
 
 
J'ai dormi pendant 5 jours et je viens de débuguer  :whistle:  
Il y avait des erreurs de syntaxes et d'autres grosses comme des maisons (le coup de $POST était énorme  :D )
 
dans tous les coins
 
 
 
 
@ rufo : effectivement pas beaucoup d'intéret mais c'est surtout pour me faire la main avec ajax ;)


Message édité par tompouss le 31-12-2014 à 10:28:11

---------------
collectionneur de pâtes thermiques
Reply

Marsh Posté le 31-12-2014 à 10:38:29    

Ajax peut être une vraie plaie pour l'accessibilité des sites web aux handicapés visuels :o Leur lecteur d'écran ne détecte aps forcément quand une portion de la page a changé de contenu suite à une requête ajax contrairement à l'envoi d'un formulaire u un clic sur un lien qui envoie l'utilisateur sur une nouvelle url : là, le lecteur d'écran n'a pas de pb ;)
 
L'autre jour, j'entends que seulement 5 à 7% des sites web étaient accessibles à ces personnes :(


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 31-12-2014 à 11:39:33    

Hummm, ça serait cool si on pouvais connaitre la nature de l'écran de l'utilisateur pour ce genre de cas...

 

En tout cas bravo si tu as résolu ton problème

Message cité 1 fois
Message édité par OrcusZ le 31-12-2014 à 11:39:58

---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 31-12-2014 à 11:48:55    

OrcusZ a écrit :

Hummm, ça serait cool si on pouvais connaitre la nature de l'écran de l'utilisateur pour ce genre de cas...
 
En tout cas bravo si tu as résolu ton problème


L'écran d'une personne malvoyante est le même que le tien. Elle a juste un soft de lecture du contenu de l'écran (ex : NVDA) qui lui lit la page affichée ou ce qui se trouve sous le curseur de la souris ou au niveau du curseur du clavier si elle utilise les raccourcis clavier pour naviguer (ce qui est souvent le cas).
 
D'où l'intérêt de mettre de bons libellés explicites sur les liens et dans l'attribut "title" pour l'aider dans son choix des liens à cliquer (en effet, le soft regroupe dans une sorte de menu, tous les liens de la page).
D'où l'intérêt d'utiliser les bonnes balises html pour leur sémantique et non leur rendu visuel (ex : <th> pour un entête de colonne de tableau et non un simple <td> car à chaque passage à la ligne du tableau, le soft relit l'entête de la colonne).
...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 31-12-2014 à 13:25:00    

Re,
 
Merci pour l'information je ne le savais pas et ferais encore plus attention qu'avant :)


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 31-12-2014 à 14:18:56    

Un lien caché pour aller direct au contenu de la page est très appréciable aussi. Sinon, l'utilisateur se tape la lecture du menu principal et contextuel du site à chaque fois. Ca devient très vite lourd. Pour s'en convaincre, installez-vous NVDA ( http://www.nvda-fr.org/download.php ) sur votre PC, fermez les yeux (encore que c'est pas obligé) et essayez de naviguer sur votre site sans souris (qu'avec le clavier).
Si vous arrivez à utiliser votre site sans pb, parfait, votre site est accessible. Sinon, vous allez très vite voir ce qui merde :/ Et je vous parle même pas quand il s'agit non plus d'un site type "vitrine" ou blog mais d'un intranet.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed