Partage
  • Partager sur Facebook
  • Partager sur Twitter

Formulaire de Contact avec reCAPTCHA

Impossible de recevoir les messages sur ma boîte mail

Sujet résolu
    17 septembre 2020 à 12:33:17

    Bonjour à tous,

    Je viens vous exposer mon problème concernant un formulaire de contact avec reCAPTCHA.

    Je ne sais pas coder le PHP, seulement le HTML/CSS, je souhaite transformer mon site statique en un site dynamique.

    J'ai donc suivi un Tuto et téléchargé du code pour créer un formulaire de contact.

    Mon problème : 

    • Sur mes premiers essais, seuls les mails provenant d'une adresse "hotmail" arrivaient sur ma boîte mail, impossible de recevoir les mails provenant de "gmail" ou "laposte.net", maintenant je ne reçois plus rien du tout alors que je n'ai rien touché.

    Le reCAPTCHA lui fonctionne très bien.

    Je vous colle le code provenant de ma page "index.php" et "contact.php" elles-mêmes liées à d'autres mais je pense que ça peut vous suffir.

    Si vous pouviez m'aider ça serait super, merci.

    index.php

    <?php
    require('constant.php');
    ?>
    <!DOCTYPE html>
    <html lang="en">
    <head>
    	<title>Contact Us</title>
    	<meta charset="UTF-8">
    	<meta name="viewport" content="width=device-width, initial-scale=1">
    	<script src="component/jquery/jquery-3.2.1.min.js"></script>
    	<script>
    	$(document).ready(function (e){
    		$("#frmContact").on('submit',(function(e){
    			e.preventDefault();
    			$("#mail-status").hide();
    			$('#send-message').hide();
    			$('#loader-icon').show();
    			$.ajax({
    				url: "contact.php",
    				type: "POST",
    				dataType:'json',
    				data: {
    				"name":$('input[name="name"]').val(),
    				"email":$('input[name="email"]').val(),
    				"phone":$('input[name="phone"]').val(),
    				"content":$('textarea[name="content"]').val(),
    				"g-recaptcha-response":$('textarea[id="g-recaptcha-response"]').val()},				
    				success: function(response){
    				$("#mail-status").show();
    				$('#loader-icon').hide();
    				if(response.type == "error") {
    					$('#send-message').show();
    					$("#mail-status").attr("class","error");				
    				} else if(response.type == "message"){
    					$('#send-message').hide();
    					$("#mail-status").attr("class","success");							
    				}
    				$("#mail-status").html(response.text);	
    				},
    				error: function(){} 
    			});
    		}));
    	});
    	</script>
    
    	<style>
    	.label {margin: 2px 0;}
    	.field {margin: 0 0 20px 0;}	
    		.content {width: 960px;margin: 0 auto;}
    		h1, h2 {font-family:"Georgia", Times, serif;font-weight: normal;}
    		div#central {margin: 40px 0px 100px 0px;}
    		@media all and (min-width: 768px) and (max-width: 979px) {.content {width: 750px;}}
    		@media all and (max-width: 767px) {
    			body {margin: 0 auto;word-wrap:break-word}
    			.content {width:auto;}
    			div#central {	margin: 40px 20px 100px 20px;}
    		}
    		body {font-family: 'Helvetica',Arial,sans-serif;background:#ffffff;margin: 0 auto;-webkit-font-smoothing: antialiased;  font-size: initial;line-height: 1.7em;}	
    		input, textarea {width:100%;padding: 15px;font-size:1em;border: 1px solid #A1A1A1;	}
    		button {
    			padding: 12px 60px;
    			background: #5BC6FF;
    			border: none;
    			color: rgb(40, 40, 40);
    			font-size:1em;
    			font-family: "Georgia", Times, serif;
    			cursor: pointer;	
    		}
    		#message {  padding: 0px 40px 0px 0px; }
    		#mail-status {
    			padding: 12px 20px;
    			width: 100%;
    			display:none; 
    			font-size: 1em;
    			font-family: "Georgia", Times, serif;
    			color: rgb(40, 40, 40);
    		}
    	  .error{background-color: #F7902D;  margin-bottom: 40px;}
    	  .success{background-color: #48e0a4; }
    		.g-recaptcha {margin: 0 0 25px 0;}	  
    	</style>
    	<script src='https://www.google.com/recaptcha/api.js'></script>	
    </head>
    <body>
    
    <div id="central">
    	<div class="content">
    		<h1>Contact Form</h1>
    		<p>Send your comments through this form and we will get back to you. </p>
    		<div id="message">
    		<form id="frmContact" action="" method="POST" novalidate="novalidate">
    			<div class="label">Name:</div>
    			<div class="field">
    				<input type="text" id="name" name="name" placeholder="enter your name here" title="Please enter your name" class="required" aria-required="true" required>
    			</div>
    			<div class="label">Email:</div>
    			<div class="field">			
    				<input type="text" id="email" name="email" placeholder="enter your email address here" title="Please enter your email address" class="required email" aria-required="true" required>
    			</div>
    			<div class="label">Phone Number:</div>
    			<div class="field">			
    				<input type="text" id="phone" name="phone" placeholder="enter your phone number here" title="Please enter your phone number" class="required phone" aria-required="true" required>
    			</div>
    			<div class="label">Comments:</div>
    			<div class="field">			
    				<textarea id="comment-content" name="content" placeholder="enter your comments here"></textarea>			
    			</div>
    			<div class="g-recaptcha" data-sitekey="<?php echo SITE_KEY; ?>"></div>			
    			<div id="mail-status"></div>			
    			<button type="Submit" id="send-message" style="clear:both;">Send Message</button>
    		</form>
    		<div id="loader-icon" style="display:none;"><img src="img/loader.gif" /></div>
    		</div>		
    	</div><!-- content -->
    </div><!-- central -->	
    </body>
    </html>



    contact.php

    <?php
    if($_POST)
    {
    require('constant.php');
        
        $user_name      = filter_var($_POST["name"], FILTER_SANITIZE_STRING);
        $user_email     = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL);
        $user_phone     = filter_var($_POST["phone"], FILTER_SANITIZE_STRING);
        $content   = filter_var($_POST["content"], FILTER_SANITIZE_STRING);
        
        if(empty($user_name)) {
    		$empty[] = "<b>Name</b>";		
    	}
    	if(empty($user_email)) {
    		$empty[] = "<b>Email</b>";
    	}
    	if(empty($user_phone)) {
    		$empty[] = "<b>Phone Number</b>";
    	}	
    	if(empty($content)) {
    		$empty[] = "<b>Comments</b>";
    	}
    	
    	if(!empty($empty)) {
    		$output = json_encode(array('type'=>'error', 'text' => implode(", ",$empty) . ' Required!'));
            die($output);
    	}
    	
    	if(!filter_var($user_email, FILTER_VALIDATE_EMAIL)){ //email validation
    	    $output = json_encode(array('type'=>'error', 'text' => '<b>'.$user_email.'</b> is an invalid Email, please correct it.'));
    		die($output);
    	}
    	
    	//reCAPTCHA validation
    	if (isset($_POST['g-recaptcha-response'])) {
    		
    		require('component/recaptcha/src/autoload.php');		
    		
    		$recaptcha = new \ReCaptcha\ReCaptcha(SECRET_KEY);
    
    		$resp = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);
    
    		  if (!$resp->isSuccess()) {
    				$output = json_encode(array('type'=>'error', 'text' => '<b>Captcha</b> Validation Required!'));
    				die($output);				
    		  }	
    	}
    	
    	$toEmail = "mail@mail.com";
    	$mailHeaders = "From: " . $user_name . "<" . $user_email . ">\r\n";
    	$mailBody = "User Name: " . $user_name . "\n";
    	$mailBody .= "User Email: " . $user_email . "\n";
    	$mailBody .= "Phone: " . $user_phone . "\n";
    	$mailBody .= "Content: " . $content . "\n";
    
    	if (mail($toEmail, "Contact Mail", $mailBody, $mailHeaders)) {
    	    $output = json_encode(array('type'=>'message', 'text' => 'Hi '.$user_name .', thank you for the comments. We will get back to you shortly.'));
    	    die($output);
    	} else {
    	    $output = json_encode(array('type'=>'error', 'text' => 'Unable to send email, please contact'.SENDER_EMAIL));
    	    die($output);
    	}
    }
    ?>




    • Partager sur Facebook
    • Partager sur Twitter
      17 septembre 2020 à 14:55:51

      Bonjour.

      As-tu vérifié que les mails n'arrivent pas dans tes spams ? Si c'est le cas, de nombreux topics sur ce sujet abordent ce problème sur ce forum.

      Cordialement.

      -
      Edité par Domi65 17 septembre 2020 à 14:56:40

      • Partager sur Facebook
      • Partager sur Twitter
        17 septembre 2020 à 15:09:24

        Bonjour,

        Merci de m'avoir répondu. J'ai effectivement déjà vérifié que les mails n'arrivaient pas dans mes spams.

        • Partager sur Facebook
        • Partager sur Twitter
          18 septembre 2020 à 16:20:28

          Ok. AS-tu essayé d'utiliser le script PHP indépendamment de l'appel AJAX, en y définissant littéralement les variables utilisées dans le mail et voir si ça changeait quelque chose ?
          • Partager sur Facebook
          • Partager sur Twitter
            19 septembre 2020 à 10:13:12

            Bonjour,

            Je ne suis pas capable de coder ce que vous me dites, j'ai du mal à comprendre ce que je dois faire.

            Eventuellement, si quelqu'un a du code pour faire un formulaire de contact opérationnel avec un reCAPTCHA V2 ou encore mieux V3 je suis preneur

            -
            Edité par Jeicko 19 septembre 2020 à 15:39:54

            • Partager sur Facebook
            • Partager sur Twitter
              20 septembre 2020 à 11:15:37

              « Je ne suis pas capable de coder ce que vous me dites »

              Je t'explique :

              tu supprimes le test if($_POST).

              Tu remplaces

              $user_name      = filter_var($_POST["name"], FILTER_SANITIZE_STRING);
                  $user_email     = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL);
                  $user_phone     = filter_var($_POST["phone"], FILTER_SANITIZE_STRING);
                  $content   = filter_var($_POST["content"], FILTER_SANITIZE_STRING);

              par quelque chose comme

              user_name  = 'Utilisateur';
              $user_email   =  'email@fai.com';
              $user_phone  = 0606060606;
              $content = 'Contenu du message'

              Et tu appelles directement le script PHP dans la barre d'adresse de ton navigateur.

              Si tu ne reçois pas de message, le script du formulaire n'est pas la source du problème.

              Edit : je précise : tu appels la page par le localhost !

              -
              Edité par Domi65 20 septembre 2020 à 11:35:30

              • Partager sur Facebook
              • Partager sur Twitter
                21 septembre 2020 à 17:53:04

                « Le message ne part pas»

                C'est court ! Faudrait y mettre un peu du tien.

                Même en faisant ce que je t'ai proposé ?

                • Partager sur Facebook
                • Partager sur Twitter
                  22 septembre 2020 à 9:30:40

                  Oui, par là j'entends que la validation du message ne se fait pas en faisant ce que vous me dites, l'animation charge comme si le message allait partir mais sans s'arrêter

                  -
                  Edité par Jeicko 22 septembre 2020 à 13:17:07

                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 septembre 2020 à 0:40:38

                    J'avais pas fait gaffe : Ce que j'ai proposé ne suffit pas. Il faut aussi supprimer le test if (isset($_POST['g-recaptcha-response']))

                    En fait, le plus simple est de commencer par faire un fichier PHP pour vérifier que lesmails partent et arrivent bien :

                    <?php
                    $destinataire = 'monEmail@monFai';
                    mail($destinataire,'test d’envoi de mail','message du mail')
                    ?>

                    Selon que le mail arrive ou pas, on pourra continuer les investigations.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 septembre 2020 à 11:59:55

                      Bonjour,

                      • 1er test : 

                      En supprimant if($_POST) et (isset($_POST['g-recaptcha-response'])) et en remplaçant

                      $user_name      = filter_var($_POST["name"], FILTER_SANITIZE_STRING);
                          $user_email     = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL);
                          $user_phone     = filter_var($_POST["phone"], FILTER_SANITIZE_STRING);
                          $content   = filter_var($_POST["content"], FILTER_SANITIZE_STRING);
                      par
                      $user_name  = 'Utilisateur';
                      $user_email   =  'email@fai.com';
                      $user_phone  = 0606060606;
                      $content = 'Contenu du message';

                      Je ne reçois pas les messages.

                      • 2e test :

                      en remplaçant le contenu de mon fichier "contact.php" par 

                      <?php
                      $destinataire = 'monEmail@monFai';
                      mail($destinataire,'test d’envoi de mail','message du mail')
                      ?>

                      Je reçois tous les messages instantanémet si mon adresse de messagerie inscrite dans le fichier "contact.php" est "monEmail@laposte.net"

                      Je reçois seulement les messages provenant d'un mail "hotmail" si mon adresse de messagerie inscrite dans le fichier "contact.php" est "monEmail@gmail.com".***EDIT: J'ai reçu tous les messages après un délai d'environ 30min.***EDIT2: Après un 2e essai je les reçois instantanément, je ne comprends pas le délai du 1er essai***

                      Merci pour l'aide que vous m'apportez

                      -
                      Edité par Jeicko 23 septembre 2020 à 12:39:57

                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 septembre 2020 à 19:48:13

                        Ok, donc on sait maintenant que ta config PHP est correcte. (Le fait qu'il faille attendre à l'occasion n'est pas anormal en soi).

                        Ton script est censé laisser un message.

                        soit « Hi machin Truc, thank you for the comments. We will get back to you shortly »,

                        soit « Unable to send email, please contact ... »

                        As-tu un de ces deux messages (ou approchant) et si oui lequel ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          25 septembre 2020 à 0:53:02

                          Avec le script d'origine j'ai le message suivant: « Hi machin Truc, thank you for the comments. We will get back to you shortly »


                          -
                          Edité par Jeicko 25 septembre 2020 à 1:21:47

                          • Partager sur Facebook
                          • Partager sur Twitter
                            25 septembre 2020 à 12:45:05

                            Si tu reçois ce message, cela signifie que le message est bien parti, pour PHP au moins. S'il détectait une erreur, tu aurais l'autre message.

                            La variable $toEmail contient-elle bien ton adresse ?

                            Qu'as-tu laissé comme SMTP dans le php.ini ?

                            • Partager sur Facebook
                            • Partager sur Twitter
                              25 septembre 2020 à 15:05:38

                              • Dans cette partie : 
                                $toEmail = "mail@mail.com";
                                  $mailHeaders = "From: " . $user_name . "<" . $user_email . ">\r\n";
                                  $mailBody = "User Name: " . $user_name . "\n";
                                  $mailBody .= "User Email: " . $user_email . "\n";
                                  $mailBody .= "Phone: " . $user_phone . "\n";
                                  $mailBody .= "Content: " . $content . "\n";
                               
                                  if (mail($toEmail, "Contact Mail", $mailBody, $mailHeaders)) {
                                      $output = json_encode(array('type'=>'message', 'text' => 'Hi '.$user_name .', thank you for the comments. We will get back to you shortly.'));
                                      die($output);
                                  } else {
                                      $output = json_encode(array('type'=>'error', 'text' => 'Unable to send email, please contact'.SENDER_EMAIL));
                                      die($output);
                                  }

                              Dois-je mettre mon adresse mail seulement à la place de "mail@mail.com" ou aussi à la place de "Contact Mail" ?

                              Si c'est la 1ere option alors oui la variable $toEmail contient bien mon adresse


                              • Pour le SMTP je ne comprends pas car je ne trouve pas de php.ini
                              Mon dossier "contact" contient 1 dossier "component" 1 dossier "img" 1 fichier "constant.php", 1 fichier "index.php", 1 fichier "contact.php"

                              -
                              Edité par Jeicko 25 septembre 2020 à 15:29:30

                              • Partager sur Facebook
                              • Partager sur Twitter
                                26 septembre 2020 à 15:05:58

                                Bonjour. La plupart du temps, le bouton répondre est bloqué chez moi, ce qui fait que je ne peux pas te répondre, désolé.

                                Tu peux ouvrir le PHP.ini en cliquant sur l'icône de wamp (si tu es sous windows) de la barre des taches. dans la liste, tu choise PHP et cliques sur php.ini.

                                là, tu cherches la section "mail function".

                                Dans cette section, dans la partie concernant windows, tu dois avoir une ligne active (sans le poinr-virgule au début)

                                SMTP = smtp.TonFAI.ext

                                Modifie-la si ce n'est pas le cas.

                                Cela dit, cela est très théorique vu que tu utilises une bibliothèque qui vient en surcouche faire on ne sait quoi et que tu n'as pas dit laquelle.

                                -
                                Edité par Domi65 26 septembre 2020 à 15:06:23

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  26 septembre 2020 à 16:36:53

                                  Pour le bouton répondre, moi je dois mettre mon curseur un peu au dessus pour qu'il fonctionne si ça peut vous aider.

                                  Alors moi j'utilise MAMP car je suis sur Mac mais je ne peux pas tester le formulaire dessus car je ne peux pas valider le REcaptcha "L'hôte local ne figure pas dans la liste des domaines acceptés pour la clé de ce site." "Captcha Validation Required!"

                                  Du coup je fais mes tests directement en ligne sur l'hébergeur Always Data.

                                  Voici les informations concernant le php.ini que j'ai trouvé :

                                  (sachant que ce sont les informations pour un compte configuré sur une version 7.2 et que j'utilise la version 7.3.20) mais je ne trouve rien d'autre à cet instant)

                                  ; Core settings
                                  max_execution_time = 120
                                  max_input_time = 60
                                  memory_limit = 256M
                                  
                                  post_max_size = 256M
                                  upload_max_filesize = 256M
                                  
                                  output_buffering = 4096
                                  expose_php = Off
                                  default_socket_timeout = 10
                                  date.timezone = "Europe/Paris"
                                  
                                  mysql.default_socket = /run/mysqld/mysqld.sock
                                  
                                  session.save_path = /home/sandbox/admin/tmp
                                  upload_tmp_dir = /home/sandbox/admin/tmp
                                  
                                  ; Extensions
                                  extension_dir = "/usr/alwaysdata/php/7.2.12/lib/php/extensions/no-debug-non-zts-20170718"
                                  
                                  extension = ctype.so
                                  extension = curl.so
                                  extension = dom.so
                                  extension = gd.so
                                  extension = gettext.so
                                  extension = iconv.so
                                  extension = json.so
                                  extension = mbstring.so
                                  extension = openssl.so
                                  extension = posix.so
                                  extension = simplexml.so
                                  extension = tokenizer.so
                                  extension = xml.so
                                  extension = xmlwriter.so
                                  extension = xsl.so
                                  extension = zip.so
                                  extension = zlib.so
                                  
                                  extension = mysqli.so
                                  extension = pgsql.so
                                  extension = pdo.so
                                  extension = pdo_mysql.so
                                  extension = pdo_pgsql.so
                                  
                                  extension = fileinfo.so
                                  extension = phar.so
                                  
                                  ; Zend extensions
                                  zend_extension = /usr/alwaysdata/php/7.2.12/lib/php/extensions/no-debug-non-zts-20170718/opcache.so


                                  Je dois avouer que je suis un peu perdu car je découvre tout ça 

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    26 septembre 2020 à 18:20:44

                                    « Du coup je fais mes tests directement en ligne sur l'hébergeur Always Data. »

                                    Ça change tout ! Le SMTP, c'est celui de AlwaysData. Tu n'as pas à intervenir là-dessus.

                                    Vu que je suis seul à y participer, passe ce topic en résolu après avoir laissé un post comme quoi tu ouvres un autre topic sur le même sujet.

                                    Ouvres-en un autre en précisant que tu fais les test chez un hébergeur et dans le sujet, ainsi que dans le corps du message,  précise la bibliothèque que tu utilises. Ceux qui connaissent cette bibliothèque pourront t'aider.

                                    Cordialement.

                                    PS : C'est vrai qu'il faut cliquer en haut du bouton ! J'en ai parlé aux modérateurs mais ils n'ont pas su me répondre ! Merci.

                                    -
                                    Edité par Domi65 26 septembre 2020 à 18:22:02

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      26 septembre 2020 à 19:25:23

                                      J'ouvre donc un autre topic sur le même sujet.

                                      Merci pour ton aide 

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Formulaire de Contact avec reCAPTCHA

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      • Editeur
                                      • Markdown