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 :
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
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";
}
?>
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.
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 !!!
alors je viens de tout bien regarder dont le lien que tu m'as fourni (datant de 2007 tout de même ).
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
<!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 😜...
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
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 :
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.
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 ?
<?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é 😜 !!
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 HTML" et 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.
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
@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…
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.
Pas d'aide concernant le code par MP, le forum est là pour ça :)
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
Pas d'aide concernant le code par MP, le forum est là pour ça :)