Page 1 sur 1

envoi par mail des données d'un formulaire

Posté : 07 janv. 2017, 19:38
par 5bis
Bonsoir,

Je n'y connais pas grand chose en php et j'ai souhaité effectuer l'envoi des données d'un formulaire de site web sur mon adresse mail. Malheureusement, tout ne fonctionne pas comme prévu ! :cry:

Voici mon formulaire :
<form method="post" action="cib.php" enctype="multipart/form-data" onSubmit="return valider()" name="formu">
   	<p>
       <label for="nom">Votre nom :</label><br />
       <input type="text" name="nom" id="nom" tabindex="10" size="30" maxlength="30" />
	</p>
	<p>
	   <label for="adresse">Votre e-mail :</label><br />
       <input type="text" name="email" id="email" tabindex="20" size="30" maxlength="35" />
   	</p>
	<p>
       <label for="message">Votre message :</label><br />
	   <textarea name="message" id="message" rows="10" cols="50" tabindex="30"></textarea>
	</p>
	<p>
       <input type="submit" name="envoi" value="ENVOYER" /> <input type="reset" value="RECOMMENCER" />
   	</p><br />
</form>
et voici le code de ma page cib.php :
<?php
    /*
    	********************************************************************************************
    	CONFIGURATION
    	********************************************************************************************
    */
    // destinataire est votre adresse mail. Pour envoyer à plusieurs à la fois, séparez-les par une virgule
    $destinataire = 'monadresse';
	     
    // copie ? (envoie une copie au visiteur)
    $copie = 'non'; // 'oui' ou 'non'
     
    // Messages de confirmation du mail
    $message_envoye = "Parfait !";
    $message_non_envoye = "L'envoi du mail a &eacute;chou&eacute;, veuillez r&eacute;essayer SVP.";
     
    // Messages d'erreur du formulaire
    $message_erreur_formulaire = "Vous devez d'abord <a href=\"contact.html\">envoyer le formulaire</a>.";
    $message_formulaire_invalide = "V&eacute;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['envoi']))
    {
    	// 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'])   : '';
    	$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 != '') && ($message != ''))
    	{
    		// les 3 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("'","'",$message);
    		$message = str_replace("&#8217;","'",$message);
    		$message = str_replace(""",'"',$message);
    		$message = str_replace('<br>','',$message);
    		$message = str_replace('<br />','',$message);
    		$message = str_replace("<","<",$message);
    		$message = str_replace(">",">",$message);
    		$message = str_replace("&","&",$message);
     
    		// Envoi du mail
    		$num_emails = 0;
    		$tmp = explode(';', $cible);
    		foreach($tmp as $destinataire)
    		{
    			if (mail($destinataire, $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.html">Retour au formulaire</a></p>'."\n";
    	};
    }; // fin du if (!isset($_POST['envoi']))
		
	header('Location: pagederemerciement.html');
		
    ?>

Re: envoi par mail des données d'un formulaire

Posté : 08 janv. 2017, 17:38
par Spols
C'est à dire ??

as tu un message d'erreur ? si oui le(s)quel(s)
recois tu le mail ? si oui montre nous le contenu, voir le code source.

Re: envoi par mail des données d'un formulaire

Posté : 09 janv. 2017, 14:36
par moogli
en tous cas il doit y avoir une erreur php avec le header après l'affichage des messages.

le nl2br doit aussi ajouter des <br/> dans le texte du mail envoyé en texte et non en html ;)

@+