> Tous les forums > Forum des Webmasters
 Fonction mail()
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
chester80
  Posté le 11/08/2006 @ 17:01 
Aller en bas de la page 
Petit astucien
Bonjour à tous, Bojour à tous, Je désire faire sur mon site une page contact.php Voici ce que j'ai codé: Contact.php:
<?php //----Etape1----- //Si un message est envoyé, on l'enregistre //----------------- if (!empty($_POST['nom']) AND !empty($_POST['prenom']) AND !empty($_POST['message']) AND !empty($_POST['mail']) AND (trim($nom) != '') AND (trim($prenom) != '') AND (trim($mail) != '') AND (trim($message) != '')) { $nom=htmlentities($_POST['nom'], ENT_QUOTES);//On utilise htlmentities par mesure desécurité.UO $prenom=htmlentities($_POST['prenom'], ENT_QUOTES); $mail=htmlentities($_POST['mail'], ENT_QUOTES); $message=htmlentities($_POST['message'], ENT_QUOTES);//De même pour le message $message=nl2br($message);//Pour le message, comme on utilise un textarea, il faut remplacer les Entrées par des <br/> //On peut enfin enregistrer mysql_query("INSERT INTO contact VALUES('', '" . $nom . "', '".$prenom."', '" . $message . "', '". $mail ."')"); include("contact/contactrep.php"); } Else { include("contact/contactnon.php"); } //----Etape 2----- //Envoyer vers mail //----------------- $to='alonzo80@hotmail.com' mail($to,$_POST['sujet'], $_POST['message']); ?>
Avec ceci normalement je dois recevoir des mails lorsque quelqu'un a poster un message. Avec l'adresse alonzo80@hotmail.com sa fonctione trés bien Avec l'adresse geoffrey.carpentier@wanadoo.fr sa ne fonctionne pas du tous Avec l'adresse scmoreuil@free.fr sa ne fonctionne pas mais je recois ce mail plus tard dans la journée avec une pièce jointe et dedans ya le mail que je devrai recevoir:
Citation : De:Mail Delivery System Sujet:Undelivered Mail Returned to Sender This is the Postfix program at host perso0.free.fr. I'm sorry to have to inform you that your message could not be be delivered to one or more recipients. It's attached below. For further assistance, please send mail to <postmaster> If you do so, please include this problem report. You can delete your own text from the attached returned message. The Postfix program <scmoreuil@free.fr>: delivery temporarily suspended: connect to mx2.free.fr[212.27.42.43]: Connection refused
Pourquoi sa fonctionne sur certaine adrese et pas sur d'autre?? merci d'avance Edité le 11/08/2006
Publicité
koala01
 Posté le 13/08/2006 à 23:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Salut, Déjà, meme si ce n'est qu'un détail (mais qui t'évitera sans doute pas mal de déconvenue), tu as pris la peine de sécuriser le résultat de ton formulaire pour l'insérer dans une base de données, c'est déjà pas mal, mais tu "prend le risque" de t'envoyer le formulaire sans aucune sécurisation… Pourquoi diable, ne pas profiter de ce que tu as quand meme une "certaine" sécurisation sous la forme des variables $nom, $prenom, $mail et $message, ne pas utiliser ces variables là lors de l'envoi de l'E-mail [question] Au passage: la concaténation de chaines prend beaucoup plus de ressources que la simple évalutation de valeurs au sein d'une chaine… Et, comble de bonheur, les guillemets doubles (double quotes ") permettent l'évaluation de variables… Il serait intéressant de modifier ton
mysql_query("INSERT INTO contact VALUES('', '" . $nom . "', '".$prenom."', '" . $message . "', '". $mail ."')");
en
mysql_query("INSERT INTO contact VALUES('', '$nom ', '$prenom', '$message', '$mail')");
voire, même (je chicane, là hein [clindoeil] [rougir]) en
$sql="INSERT INTO contact VALUES('', '$nom', '$prenom', '$message', '$mail')"; mysql_query($sql);
ou, fin du fin;, en
$sql=sprintf("INSERT INTO contact VALUES('', '%s', '%s', '%s', '%s')",$nom,$prenom,$message,$mail); mysql_query($sql);
Au passage (bis), prend tu la précaution de vérifier que l'adresse introduite soit, au minimum au format normal d'une adresse Email [question] (une arobase @ qui ne soit ni en première position ni en dernière position, et un point . APRES l'arobase, mais ni tout de suite après, ni en dernière position)

Modifié par koala01 le 13/08/2006 23:30
chester80
 Posté le 13/08/2006 à 23:33 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
d'accord merci. mais comment je dois faire pour sécurisé l'envoide mail?? merci d'avance
koala01
 Posté le 14/08/2006 à 00:19 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Il s'agirait, dans un premier temps, de sécuriser le contenu de $_POST[sujet] exactement de la meme manère que ce qui est fait pour le contenu de $_POST[message] (dans une variable $sujet, par exemple [clindoeil]) Une fois cette sécurisation effectuée, au lieu d'utiliser le contenu des champs de formulaires sous la forme (actuelle) de
mail($to,$_POST['sujet'], $_POST['message']);
utilise les variables qui contiennent ces valeurs "sécurisées" sous la forme de
mail($to,$sujet,$message)
Il semblerait en outre judicieux de rajouter un champs "sujet" dans ta table et d'insérer la variable sécurisée sujet en meme temps que le reste de l'enregistrement Enfin, selon moi, du moins, l'envoi de l'E-mail et l'insertion dans ta table ne doivent tous les deux avoir lieu que si le formulaire a été correctement rempli… La fonction mail serait donc bien plus à sa place juste après l'inclusion de contact/contactrep.php, dans la partie "if" de ton test [clindoeil] Voici donc ton code avec les modifications telles que je te le conseillerais…
<?php //----Etape1----- //Si un message est envoyé, on l'enregistre et on envoie l'E-mail //----------------- if (!empty($_POST['nom']) AND !empty($_POST['prenom']) AND !empty($_POST['message']) AND !empty($_POST['mail']) AND (trim($nom) != '') AND (trim($prenom) != '') AND (trim($mail) != '') AND (trim($message) != '')) { $mail=$_POST['mail'], ENT_QUOTES; $nom=htmlentities($_POST['nom'], ENT_QUOTES);//On utilise htlmentities par mesure desécurité.UO $prenom=htmlentities($_POST['prenom'], ENT_QUOTES); $message=htmlentities($_POST['message'], ENT_QUOTES);//De même pour le message $sujet=htmlentities($_POST['sujet'], ENT_QUOTES);//et pour le sujet $message=nl2br($message);//Pour le message, comme on utilise un textarea, il faut remplacer les Entrées par des <br/> //on ne peut enregistrer que si l'adresse E-mail est au bon format //les expression régulières viennent à notre secours sur ce coup là if(!ereg ("^[^@ ]+@[^@ ]+\.[^@ \.]+$", $mail)) { //On peut enfin enregistrer $sql=sprintf("INSERT INTO contact SET(`nom`,`prenom`,`sujet`,`message`,`mail`) VALUES('%s', '%s', '%s', '%s', '%s')",$nom,$prenom,$sujet,$message,$mail); mysql_query($sql); include("contact/contactrep.php"); //on envoie l'email $to='alonzo80@hotmail.com' mail($to,$sujet, $message); } } else { include("contact/contactnon.php"); }
(en ayant rajouté un champs "sujet"(varchar 255) dans la table) Cela ne résoudra peut etre pas le problème, mais, au moins, tu n'enverra plus d'E-mail si tout n'est pas correctement rempli, et ton code sera réellement sécurisé (ou du moins beaucoup plus qu'actuellement), et plus "seulement à moitié"[clindoeil]
Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
479,99 €NAS Synology DS220+ + 2 disques durs Seagate IronWolf 4 To à 479,99 €
Valable jusqu'au 07 Décembre

Fnac fait une promotion sur un pack comprenant le tout nouveau NAS Synology DS220+ et 2 disques durs Seagate IronWolf 4 To (8 To au total) qui passe à 479,99 € alors qu'on le trouve ailleurs à partir de 559 €.  Le serveur NAS Synology DiskStation DS220+ est la solution à vos besoins pour un stockage sécurisé des données et un partage de vidéos en ultra haute définition. Animé par un nouveau processeur double cœur d'Intel, le DS220+ est dotée du chiffrement à accélération matérielle des données et du transcodage en temps réel des contenus source 4K Ultra HD.


> Voir l'offre
41,90 €Souris Logitech MX Master (unify, bluetooth, capteur laser) à 41,90 €
Valable jusqu'au 08 Décembre

Amazon fait une promotion sur l'excellente souris sans fil Logitech MX Master qui passe à 41,90 € livrée gratuitement alors qu'on la trouve ailleurs à partir de 80 €. Cette souris offre une double connectivité sans fil unify ou bluetooth. Son capteur laser Dark field vous permettra de l'utiliser sur n'importe quelle surface.


> Voir l'offre
24,99 €SSD Gigabyte 256 Go à 24,99 €
Valable jusqu'au 07 Décembre

Cdiscount fait une promotion sur le SSD Gigabyte 256 Go (mémoire TLC) à 24,99 € au lieu de 40 €. Ce SSD offre des vitesses de 500 Mo/s en lecture et 420 Mo/s en écriture.


> Voir l'offre

Sujets relatifs
fonction mail() et wamp
hebergeur fonction mail
Fonction Mail PHP - Mails non transmis
Fonction Mailto limité a un certain nombre de mail
fonction mail avec piece jointe
fonction PHP mail()
une petite fonction de mail
la fonction "répondre" d'un mail ne fonctionne pas
itineweb et fonction mail()
fonction mail PHP chez free ? [résolu]
Plus de sujets relatifs à Fonction mail()
 > Tous les forums > Forum Forum des Webmasters