Php envoyer un e-mail
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?php
$Nom1 = $_POST['nom'];
$prenom2 = $_POST['prenom'];
$text = $_POST['text'];
$EMail = $_POST['EMail'];
$adresse = "test@gmail.com";
$sujet = "test";
$contenu_msg = " nom : $Nom1, prenom : $prenom2, e-mail client: $EMail, texte: $text" ;
$adresse_exp = "From: entreprise@test.fr";
mail($adresse, $sujet, $nom, $adresse_exp);
echo mail();
?>
Configuration: Mac OS X Safari 531.21.10
31 réponses
Un formulaire HTML manipulé en PHP envoie le mail sans les variables saisies, le code lisant $_POST mais transmettant des valeurs inappropriées et des erreurs d’appel à mail. Pour cela, construire le contenu du message avec les données POST en utilisant des concaténations propres (Nom, Prénom, E-mail client et texte) et éviter les noms de variables non définis. Utiliser le bon appel mail avec les variables exactes et headers, par exemple mail($adresse, $sujet, $contenu_msg, $adresse_exp), et vérifier $_POST via print_r pour dépanner l’origine des données. D'autres éléments évoquent aussi la nécessité de vérifier si le script s’exécute côté serveur, et de tester les noms des champs du formulaire pour éviter des décalages avec $_POST.
-
Ben non je ne sais pas vraiment ... peut-etre .. en fait si surement, ca devait l'enctype qui comme son nom définit l'encodage, ton serveur devait bien encoder ou alors agir en mettant un autre encodage par défaut alors que ton serveur distant devait simplement ne pas réussir a encoder et donc : blanc . Je suppose ..
-
J'ai modifié les erreurs dans le formulaire :
<label for="nom">Nom : </label> <input type="text" name="Nom1" id="nom" accesskey="n" />
Le "for" du label doit renvoyer a l'"id" de l'input .. ensuite dans le code php :$M1 = $_POST['Nom1']; et $contenu_msg = "Nom : ".$M1."\n";
dans contenu_msg tu ne récuperais non pas la valeur $M1 mais tu avait mit : Nom1 ce qui devait bloquer tes variables ... De plus ! Je ne sais pas si ton script fermais la balise php mais je ne voyait pas de "?>" a la fin .
Voila ^^-
Je sais bien que tu avais modifié l'id, tu l'avais dit et moi aussi. Quant à l'erreur de variable $M1 /$Nom1, je l'avais signalée à julienptr depuis longtemps et ce n'est sûrement pas elle qui empêchait de voir le prénom ni le texte ... Le problème est qu'il ne récupérait rien du tout dans $_POST.
Ma question (si c'est bien à moi que tu répondais...) n'était pas : "qu'as-tu changé ?" mais "sais-tu ce qui est déterminant dans ce que tu as changé ?". Car, au risque de me répéter, malgré les erreurs d'enctype et d'id, ça marchait très bien chez moi. Les navigateurs sont en général très, très tolérants (et heureusement quand on voit comment les normes ne sont pas respectées...)
-
-
"résolu" ;) . Et : Mais de rien :)
-
ifisch, as-tu une idée du point qui justifie le changement de comportement ? l'enctype ? l'id ? Histoire que je tourne moins en rond la prochaine fois.
Visiblement, le browser de MAC OS est plus exigeant (ou plus facilement perturbé...) que mon FF car chez moi le formulaire envoyait bien les données .
-
-
merci beaucoup a tout l'email fonctionne parfaitement a présent
-
<fieldset> <form action="mail2.php" method="post"> <p> <label for="nom">Nom : </label> <input type="text" name="Nom1" id="nom" accesskey="n" /> </p> <p> <label for="prenom">Prénom :</label> <input type="text" name="prenom" id="prenom" accesskey="p" /> </p> <p> <label for="e-mail">E-mail</label> <input type="text" name="EMail" id="e-mail" accesskey="m" /> </p> <p> <textarea name="text" cols="60" rows="15" id="text" accesskey="m"></textarea> </p> <p> <input type="submit" name="Envoyer" id="envoyer" value="Envoyer" /> </p> </form> </fieldset> <?php $M1 = $_POST['Nom1']; $prenom2 = $_POST['prenom']; $text = $_POST['text']; $EMail = $_POST['EMail']; echo $M1." et ".$prenom2." et ". $text ." et ".$EMail ; // teste si les variables sont bien récupéré $adresse = " test@gmail.com"; $sujet = "test"; $contenu_msg = "Nom : ".$M1."\n"; $contenu_msg .= "Prénom : ".$prenom2."\n"; $contenu_msg .= "E-mail client : ".$EMail."\n"; $contenu_msg .= "Texte : ".$text; ?>
J'ai remit aux normes tes label avec tes id au passage ...
Tu peux nous dires si les tests fonctionnent ? (si un message apparait dans la page qui envoie le le mail) -
On dirait que PHP n'est carrément pas installé ... mais on dirait seulement ^^
-
désoler mais je ne comprend pas ou je doit mettre print_r($_POST) dans mon script. peut tu me montrer ?
-
je pense qu'il y a un problème lorsque je déclare mais variables mais je ne trouve pas le quel.
si print_r($_POST) n'affiche rien, il est normal que les variables $_POST['Nom1']; etc... ne contiennent rien.
De plus en plus bizarre...
Le script du formulaire que tu donnes message 15 est-il complet ou manque-t-il des morceaux ? -
oui j'ai corriger mais rien ne change ....
oui j'ai remplis les champs du formulaire ....
normalement tous devrais marcher. je pense aussi qu'il y a un problème lorsque je déclare mais variables mais je ne trouve pas le quel. -
Et as-tu corrigé le enctype ?
-
Il faut faire un echo du print_r()
Non, c'est inutile.
Quand tu cliques sur le bouton du formulaire, as-tu mis quelque chose dans les nom, prénom, etc... ? Ça a peut-être l'air bête comme question, mais sait-on jamais.... -
Il faut faire un echo du print_r()
-
j'ai écrit sa : (sela ne change rien )
<?php
print_r($_POST);
$M1 = $_POST['Nom1'];
$prenom2 = $_POST['prenom'];
$text = $_POST['text'];
$EMail = $_POST['EMail'];
(merci beaucoup de m'aider ) -
J'en ai oublié de re-demander ce que donne le print_r($_POST);
-
Oui $M1 = $_POST['Nom1'];" suffit
mais ensuite, il faut faire $contenu_msg = 'Nom : '.$M1."\n"; et non pas $contenu_msg = 'Nom : '.$Nom1."\n"; -
print_r sert à explorer un array !
Donc "$M1 = $_POST['Nom1'];" suffit -
pour déclare la variable nom j'écrit
$M1 = print_r($_POST)['Nom1'];
ou
$M1 = print_r($_POST['Nom1'] ); -
Le problème est sans doute dans le enctype : corriges-le et si ça ne fonctionne toujours pas retire-le.
-
Y a-t-il autre chose dans mail2.php avant la partie que tu montres ? Il y a peut-être un problème dans ce que tu ne montres pas ...
Autre idée : au début de mail2.php, juste après le <?php, ajoute :
print_r($_POST); -
Ce script marche chez moi malgré les erreurs :
espace en trop dans l'adresse $adresse = " test@gmail.com";
erreur dans le nom de la variable $contenu_msg = 'Nom : '.$Nom1."\n"; : c'est $M1 qui contient le nom, pas $Nom1
Ce qui suit le ?> est incomplet je suppose ? On ne devrait quand même pas trouver <body> sans avoir vu passer le </head>
En mettant aussi une adresse correcte dans From:
Confirmes-tu que tu reçois le mail sans les variables ? Je comprendrais que tu ne reçoives rien du tout à la rigueur, mais là ça m'étonne.
autre détail : dans le formulaire, enctype="text/plain", pas "texte/plain"
- 1
- 2