Partage
  • Partager sur Facebook
  • Partager sur Twitter

Envoyer un mail en PHP via le formulaire HTML

HTML & PHP

Sujet résolu
17 juin 2018 à 11:54:21

Salut tout le monde, déjà mille excuse pour ce que je vais demander car il s'agit d'un sujet qui a surement déjà été traité mais j'ai cherché et j'ai pas trouvé de réponse clair 😉 !!! Voilà, j'aimerais que lorsque une personne envoie le formulaire, je reçoive le message sur ma boite mail (pas dans les spam😭) avec son nom,  email, objet du message et message...

Voici mon code HTML : 

Voici un code PHP que j'ai trouvé et corrigé dans mon cas :

Voilà j'espère que vous pourrez m'aider 🙏🙏😇

  • Partager sur Facebook
  • Partager sur Twitter
17 juin 2018 à 12:02:36

Multicompte et multipost avec Formulaire non modifié ne fonctionne plus ?

> pas dans les spam

Sauf que ça dépend de plein de choses : contenu du mail, s'il est signé (dkim), etc.

-
Edité par julp 17 juin 2018 à 12:06:57

  • Partager sur Facebook
  • Partager sur Twitter
17 juin 2018 à 12:02:49

Bonjour,

Regarde du coté de la fonction mail de php : http://php.net/manual/fr/function.mail.php je l'ai utilisé pour un de mes sites et je ne reçois pas dans les spam tout fonctionne très bien ^^

Clément

  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2018 à 0:32:02

Re-salut j'ai trouvé un script que j'ai arrangé dans mon cas, qui envoie très bien le message mais apparemment il y a une erreur au niveau du "define" !!!

J'ai réalisé ce code à deux endroits, un sur un nouveau fichier et tout fonctionne et un directement sur mon site web et là ça plante 😱😱😱Quand j'essai de mettre ce code php sur mon site à un endroit précis, tout ce qui suit ne s'affiche plus  et ce fait planter le JS de mon site par la même occasion !!

Voilà le code PHP : 

<?php

$msg_erreur = "Les champs suivants doivent être obligatoirement 
remplis :<br/><br/>";
$msg_ok = "Votre demande a bien été prise en compte.";
$message = $msg_erreur;

define('monmail@gmail, Message du formulaire');

// vérification des champs
if (empty($_POST['nom'])) 
$message .= "Votre nom<br/>";
if (empty($_POST['prenom'])) 
$message .= "Votre prénom<br/>";
if (empty($_POST['email'])) 
$message .= "Votre adresse mail<br/>";
if (empty($_POST['comments'])) 
$message .= "Votre message<br/>";

if (strlen($message) > strlen($msg_erreur)) {
  echo $message; die();
}

foreach($_POST as $index => $valeur) {
  $$index = stripslashes(trim($valeur));
}

//Préparation de l'entête du mail:
$mail_entete  = "MIME-Version: 1.0\r\n";
$mail_entete .= "From: {$_POST['nom']} "
             ."<{$_POST['email']}>\r\n";
$mail_entete .= 'Reply-To: '.$_POST['email']."\r\n";
$mail_entete .= 'Content-Type: text/plain; charset="iso-8859-1"';
$mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
$mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";

// préparation du corps du mail
$mail_corps  = "Message de : $nom $prenom\n";
$mail_corps .= $comments;

// envoi du mail
if (mail('monmail@gmail.com','Message de mon site web',$mail_corps,$mail_entete)) {
  //Le mail est bien expédié
  echo $msg_ok;
} else {
  //Le mail n'a pas été expédié
  echo "Une erreur est survenue lors de l'envoi du formulaire par email";
}

?>

et le code HTML : 

<form method="post" action="">

						<label for="nom">Nom</label>
						<input type="text" placeholder="Ici votre nom" id ="nom" name="nom" />

						<label for="objet">Prénom</label>
						<input type="text" placeholder="Ici votre prénom" id ="objet" name="prenom" />

						<label for="email">Email</label>
						<input type="text" placeholder="Ici votre email" id ="email" name="email" />

						<label for="message">Message</label>
						<textarea id="message" placeholder="Ici votre message" name="comments" cols="30" rows="8"></textarea>

					<input type="submit" name="envoi" value="Envoyer" />
					<input type="reset" name="reset" value="Effacer" />

				</form>



-
Edité par Tpercher 18 juin 2018 à 12:58:11

  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2018 à 19:57:09

Bonsoir, 

La je n'ai pas le temps de vraiment regarder je regarderai des que j'ai le temps, pourrais tu juste me dire quelle erreur s'affiche ?

  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2018 à 20:22:51

Salut, il me dit que j'ai une erreur sur la balise <html> et avant il me disait que l'erreur était sur le define (ligne 8)!!

Quoi que je mette dans le formulaire il me dit que l'envoie à marché (meme si je met de la merde en adresse mail) mais je ne reçois pas le mail...😕

PS : J'ai pas oublié de fermer la balise HTML 

-
Edité par Tpercher 18 juin 2018 à 20:28:39

  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2018 à 20:49:40

Je viens de regarder, déjà tu n'as pas défini la valeur de l'attribut "action" de ta balise <form> qui doit contenir le fichier php qui se charge du traitement des données.

Et ligne 25 dans ton code php tu écris 2 fois le signe "$" ce qui donne "$$index" au lieu de "$index".

Ensuite tu dis "j'ai trouvé un script que j'ai arrangé dans mon cas", pourrais je avoir le lien stp ? :)

Je ne peux que te conseiller d'essayer de faire par toi même si tu n'as jamais utilisé la fonction mail surtout que la doc php est complète (http://php.net/manual/fr/function.mail.php) et que c'est un excellent exercice. 


  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2018 à 23:41:40

Hum pour le action je l'ai mis mais il est pas dans le code ci-dessus, désolé et pour le reste j'ai corrigé les trucs que tu m'as dis mais le formulaire me dit que l'email a été envoyé (même en mettant n'importe quoi dans l'email) sans rien recevoir !!! 

Pour ce qui est du code je l'ai trouvé ici je crois bien : http://www.6ma.fr/tuto/formulaire+php+envoi+par+email-254

  • Partager sur Facebook
  • Partager sur Twitter
19 juin 2018 à 9:45:09

Me revoilà,

alors je viens de tout bien regarder dont le lien que tu m'as fourni (datant de 2007 tout de même :lol:).

Déjà je t'ai raconté n'importe quoi quand je t'ai dis "ligne 25 dans ton code php tu écris 2 fois le signe "$" ce qui donne "$$index" au lieu de "$index" " car j'ai regardé sur internet et c'est ce qu'on appelle les variables dynamiques, je ne connaissais pas et je m'en excuse (http://php.net/manual/fr/language.variables.variable.php). 

Ensuite la fonction define() permet de définir une constante en donnant le nom de la constante et en 2ème paramètre sa valeur, or tu ne donne qu'un paramètre ce qui n'est pas interdit mais qui est inutile dans ton cas, encore une fois je t'invite à lire la doc php ! (http://www.php.net/function.define).

Du coup la ligne avec define() tu peux la supprimer, tu peux remettre "$$index" contrairement à ce que j'ai dis hier, et normalement tout est bon et j'ai testé ça m'affiche les erreurs quand un ou plusieurs champs sont vides.

Là ça va t'envoyer le mail à "monmail@gmail.com" du coup enfin je pense que tu avais mis ça pour ne pas montrer ta vraie adresse mail.

Et aussi si tu testes en local sans avoir de serveur mail ça ne pourra pas fonctionner, mais là n'est pas le sujet.

A l'avenir utilises la doc php et fais le par toi même plutôt que de prendre un code que tu ne comprends pas, surtout qu'il y a plus simple pour envoyer un mail, mais bon il faut lire la doc pour le comprendre :-°

Dis moi si tout fonctionne ;)

-
Edité par Clément_ 19 juin 2018 à 9:46:51

  • Partager sur Facebook
  • Partager sur Twitter
19 juin 2018 à 10:14:32

Hum ca ne marche toujours pas, pourtant j'ai bien fais attention😕...

Mon code HTML (fichier index.php) : 

<h3> Me contacter </h3>
			<article>
				<form method="post" action="traitement.php">

						<label for="nom">Nom</label>
						<input type="text" placeholder="Ici votre nom" id ="nom" name="nom" />

						<label for="objet">Prénom</label>
						<input type="text" placeholder="Ici votre prénom" id ="objet" name="prenom" />

						<label for="email">Email</label>
						<input type="text" placeholder="Ici votre email" id ="email" name="email" />

						<label for="message">Message</label>
						<textarea id="message" placeholder="Ici votre message" name="comments" cols="30" rows="8"></textarea>

					<input type="submit" name="envoi" value="Envoyer" />
					<input type="reset" name="reset" value="Effacer" />

				</form>
			</article>


Mon code PHP (fichier traitement.php):

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<link rel="stylesheet" type="text/css" href="css/style.css">
	<title>Envoi du formulaire réussi</title>
</head>
<body>
	<?php
		$msg_erreur = "Le(s) champ(s) suivant(s) doit/doivent être remplis :<br/><br/>";
		$msg_ok = "L'envoi de l'email a marché, Merci !";
		$message = $msg_erreur;

		// vérification des champs
		if (empty($_POST['nom'])) 
		$message .= "Votre nom<br/>";
		if (empty($_POST['prenom'])) 
		$message .= "Votre prénom<br/>";
		if (empty($_POST['email'])) 
		$message .= "Votre adresse mail<br/>";
		if (empty($_POST['comments'])) 
		$message .= "Votre message<br/>";

		if (strlen($message) > strlen($msg_erreur)) {
		  echo $message; die();
		}

		foreach($_POST as $index => $valeur) {
		  $$index = stripslashes(trim($valeur));
		}

		//Préparation de l'entête du mail:
		$mail_entete  = "MIME-Version: 1.0\r\n";
		$mail_entete .= "From: {$_POST['nom']} "
		             ."<{$_POST['email']}>\r\n";
		$mail_entete .= 'Reply-To: '.$_POST['email']."\r\n";
		$mail_entete .= 'Content-Type: text/plain; charset="iso-8859-1"';
		$mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
		$mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";

		// préparation du corps du mail
		$mail_corps  = "Message de : $nom $prenom\n";
		$mail_corps .= $comments;

		// envoi du mail
		if (mail('monmail@gmail.com','Message de mon site web',$mail_corps,$mail_entete)) {
		  //Le mail est bien expédié
		  echo $msg_ok;
		} else {
		  //Le mail n'a pas été expédié
		  echo "Une erreur est survenue lors de l'envoi du formulaire par email";
		}
	?>
</body>
</html>


PS : Je n'ai pas oublié de mettre mon adresse mail à la place de monmail@gmail.com donc ca ne vient pas de là, et j'ai déjà réussi à envoyer des mails tout à l'heure avec MAMP donc la configuration est bonne je pense...

Tu m'a parlé d'un code plus simple pour envoyer un email avec un formulaire, aurais tu un tutoriel assez complet sous la main 🙏 ? 

Je suis en 2eme année en communication digitale et e-business, j'aimerais apprendre le PHP mais actuellement je fais ce site pour valoriser mon stage de l'année prochaine donc j'ai pas vraiment le temps pour l'instant mais pendant les vacs je compte apprendre PHP et JS en détails 😜... 

-
Edité par Tpercher 19 juin 2018 à 10:29:32

  • Partager sur Facebook
  • Partager sur Twitter
19 juin 2018 à 10:43:35

Je ne sais pas si tu en fais exprès mais ça fait plusieurs fois que je te donne le lien permettant d'apprendre/comprendre pour ensuite mettre en place facilement l'envoi d'email :lol:

http://php.net/manual/fr/function.mail.php ! :-°

La doc explique tout sur l'envoi de mail avec la fonction mail(). La doc php est complète et même traduite en français ! 

Il faut juste rajouter à ça les vérifications.

Et quand tu arrives sur la page il faut pas juste lire uniquement ce que tu vois, quand tu descends tu as des exemples différents selon ce que tu cherches à faire. Et quand tu arrives sur n'importe quelle fonction php dans la doc, tu as toujours tout en haut la "Description" qui ressemble à ça tout le temps :

bool mail ( string $to , string $subject , string $message [, mixed $additional_headers [, string $additional_parameters ]] )

En faite le type de variable attendu ou encore ce que renvoie la fonction est toujours écrit. Par exemple le "bool" devant "mail" signifie que la fonction mail renvoie true ou false, ou encore le "string" devant $to signifie que la variable qui contient le destinataire doit être de type string (chaîne de caractères) et entre crochets ce sont des paramètres facultatifs. :)

-
Edité par Clément_ 19 juin 2018 à 10:45:27

  • Partager sur Facebook
  • Partager sur Twitter
19 juin 2018 à 14:16:04

J'ai totalement changé mon code php, l'autre m'a saoulé, je tiens à dire que ce code fonctionne mais pouvez-vous me dire si c'est bien ? Si je peux le simplifier encore ? 

Code html :

<section id="contact">
			<h3> Me contacter </h3>
			<article>
				<form method="post" action="traitement.php">
					<legend>Tous les champs du formilaire sont obligatoires</legend>
						<label for="nom">Nom</label>
						<input type="text" placeholder="Ici votre nom" id ="nom" name="nom" required="required" />

						<label for="prenom">Prénom</label>
						<input type="text" placeholder="Ici votre prénom" id ="prenom" name="prenom" required="required" />

						<label for="email">Email</label>
						<input type="text" placeholder="Ici votre email" id ="email" name="email" required="required" />

						<label for="message">Message</label>
						<textarea id="message" placeholder="Ici votre message" name="comments" cols="30" rows="8" required="required"></textarea>

					<input type="reset" name="reset" value="Effacer" />
					<input type="submit" name="envoi" value="Envoyer" />

				</form>
			</article>
		</section>

Code php : 

<?php
						// Déclaration des messages

		$msg_erreur = "L'envoi a échoué, le formulaire n'a pas été correctement remplis";
		$msg_ok = "L'envoi de l'email a été un succès, merci !";

						// Déclaration des variables envoi du mail

		$nom = $_POST['nom'];
		$prenom = $_POST['prenom'];
		$messagerie = $_POST['email'];
		$contenu = $_POST['comments'];

		$entete = "Message de : $nom $prenom\n";
		$entete = wordwrap($message, 70, "\r\n");
		$corps = "Bonjour,\n\n $contenu\n\n";
		$piedmail = "Me contacter :\n\n$nom\n$prenom\n$messagerie";

		if ($nom != "" && $prenom != "" && $messagerie != "" && $contenu != "") {
			if (preg_match('#^[\w.-]+@[\w.-]+\.[a-z]{2,6}$#i', $messagerie)) {
				$message = "$entete\n$corps\n$piedmail";
				mail('monmail@gmail.com', 'Formulaire de mon site web', $message);
				echo $msg_ok;
			}else{
				echo $msg_erreur;
			}
		}else{
			echo $msg_erreur;
		}
	?>

Quelques questions pour l'améliorer : Comment faire pour faire apparaitre un texte en rouge au dessus du champs "nom" si ce champ est vide ou invalide (pareil pour les autres champs) ? Comment faire pour qu'une fois le form envoyé, la fenêtre reste au niveau du form sans remonter tout en haut de mon site ? 

Je sais ça fait beaucoup de questions, désolé 😜 !!

  • Partager sur Facebook
  • Partager sur Twitter
19 juin 2018 à 15:30:42

Super si ça fonctionne, oui il peut être amélioré. Par exemple tu peux utiliser

if (!empty($ta_variable) && !empty($ton_autre_variable) && ...

Plûtot que != ""

et pour envoyer le mail et savoir s'il est bien envoyer :

if (mail(je te laisse remplir)) {
   //code si le mail est envoyé
} else {
   //code si le mail n'est pas envoyé
}

Pour tes autres questions ce n'est pas le sujet qui était de base "Envoyer un mail en PHP via le formulaire HTMLet qui semble être résolu d'après toi "ce code fonctionne" je te conseille donc de le mettre en résolu et de créer un autre post bien expliqué, en expliquant ce que tu veux faire, ce que tu as tenté de faire mais qui n'a pas fonctionné et ton code.

-
Edité par Clément_ 19 juin 2018 à 15:31:13

  • Partager sur Facebook
  • Partager sur Twitter
3 décembre 2019 à 14:47:57

Repose en paix, ami sujet.

Et comme avant ça il était bloqué en haut de liste (il n'y a pas d'autre moyen pour le débloquer actuellement), ce n'est pas un déterrage  :p

@Staff (verts) : si vous répondiez pour déterrage, ce serait une solution temporaire imaginable dans ces cas, non ? Quitte d'ailleurs à profiter pour fermer le sujet et éviter un autre déterrage plus tard…

-
Edité par Ymox 3 décembre 2019 à 15:30:00

  • Partager sur Facebook
  • Partager sur Twitter
20 janvier 2021 à 2:57:06

Tpercher :

define('monmail@gmail, Message du formulaire'); // erreur de quotes

define('monmail@gmail', 'Message du formulaire'); // Quotes bien définies 

  • Partager sur Facebook
  • Partager sur Twitter
20 janvier 2021 à 8:27:36

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter

Pas d'aide concernant le code par MP, le forum est là pour ça :)