ENVOI DE MAIL SANS LOGICIEL

cs_twisteurwin Messages postés 167 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 2 mai 2009 - 4 nov. 2005 à 09:43
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 4 nov. 2005 à 17:22
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/34476-envoi-de-mail-sans-logiciel

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
4 nov. 2005 à 17:22
Hello,

Oragore => Et sinon, question en passant, doit ont vraiment se soucier des Notice ? ne sont elles pas censés etre desactivés en exploitation ?
=> Oui! On doit s'en soucier. Un "notice" reste une erreur de programmation. Et puis, en général, des notices sur l'utilisation de variable non existantes (le plus fréquent) sont synonymes de codes absolument pas sécurisé : le codeur ne sait pas ce qu'il reçoit, puisqu'il est capable de travailler avec une variable qui n'existe pas...moi, ça me ferait peur ;-)

Nota : profitez bien des commentaires, lisez-les, et pour poursuivre, poursuivez avec votre interlocuteur par MP, parce que je prépare la suppression de ce code (avec un MP à l'auteur expliquant les raisons de la suppression, et une copie des commentaires les plus intéressants, qui pourront l'aider à s'améliorer et à comprendre ce qui n'allait pas).

Merci! Et bon we à tous !
oragore Messages postés 8 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 4 novembre 2005
4 nov. 2005 à 17:02
oups monoceros01 oui effectivement j'avais la ton commentaire.

Donc le plus adatpé serait :

if(!empty($_POST['nom']) || !empty($_POST['email']) || !empty($_POST['texte'])){
$nom=trim($_POST['nom']);
$email=trim($_POST['email']);
$texte=trim($_POST['texte']);
}
else{
$suite='ERR';}
if(empty($nom) || empty($email) || empty($texte)) $suite='ERR';



etc ... suivit d'un if qui verifi que $suite!='ERR' && $email au bon format, etc ...


Et sinon, question en passant, doit ont vraiment se soucier des Notice ? ne sont elles pas censés etre desactivés en exploitation ?
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
4 nov. 2005 à 16:58
Et si je mettais toto@toto.com cela marche?
Oui seul le format du mail est vérifié, donc on peut mettre ce que l'on veut.
Autant en faire un champ facultatif quoi...
mariobotta Messages postés 57 Date d'inscription samedi 30 avril 2005 Statut Membre Dernière intervention 12 septembre 2009
4 nov. 2005 à 16:55
bonjour,

en effet , je vois pas trop ce que ce code apporte de plus que certain tuto concernant l'envois de email avec php?il y en a déjà bcp sur le site et ailleurs.
Pour ma part j'aurai ajouter un pitit css cela t'aurais éviter tout ce code pour la mise en forme de tes textes.
Et si je mettais toto@toto.com cela marche?
enfin ya pire comme code

aller continue...
bonne prog à toi
nicomage Messages postés 7 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 10 juin 2006
4 nov. 2005 à 16:03
bonour
moi je met 10/10
c'est un code tres pratique
enfin moi je trouve et il et tres facile à gerer
moi j'aurais juste mois un champ e_mail du destinatairs ce serait plus facile à gerer celui qui on envoile le message
voila mais ça merite 10/10 moi je pense !
@+
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
4 nov. 2005 à 15:09
Pourquoi pas directement
$nom=trim($_POST['nom']);
Par ce que si $_POST['nom'] n'est pas défini, il retournera une erreur de type "Notice: undefined index nom in blablablabla..."

Oui remplacer
if(strlen($nom) < 1)
par
if(!empty($nom)) ou if($nom !== '')
C'est bien je pense. Par contre ce n'est pas équivalent à la condition de doogyice. Lui n'autorise pas les chaîne de un caractère. Étrange façon de faire...

if(mail($destinataire, $sujet, $mailcontent, $expediteur)){
echo'Votre message à bien été envoyé.
';}
Plutôt
if(mail($destinataire, $sujet, $mailcontent, $expediteur)){
$report='Votre message à bien été envoyé.';}
Comme je l'ai préconisé dans ma correction. Pour bien séparer traitement et affichage.
oragore Messages postés 8 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 4 novembre 2005
4 nov. 2005 à 14:11
oups rectification, mais vous aviez compris ;)

if (!empty($nom)) ==> if (empty($nom))
oragore Messages postés 8 Date d'inscription lundi 15 mars 2004 Statut Membre Dernière intervention 4 novembre 2005
4 nov. 2005 à 14:09
Et pourquoi pas directement

$nom=trim($_POST['nom']);

et a la place de
if (strlen($nom) < 1)
metre
if (!empty($nom))

et a la rigueur a la fin
if(mail($destinataire, $sujet, $mailcontent, $expediteur)){
echo'Votre message à bien été envoyé.
';}

A titre purement suggestif.
monoceros01 Messages postés 420 Date d'inscription vendredi 28 novembre 2003 Statut Membre Dernière intervention 20 mars 2006
4 nov. 2005 à 13:08
Contrairement à ce que pense la majorité, je le trouve assez mal codé tant du point de vu html que php. Certe, il fonctionne, mais le code est vraiment pas terrible :

HTML :
- Il manque la DOCTYPE
- tu ne mets pas de doubles quotes ("") autour de la valeur de certains des attributs de tes balises
- les éléments dépourvus de balises fermantes doivent être fermées par un / avant le >
- l'utilisation de
multiples et de l'élément FONT, obsolète, sont des pratiques dépassées (pour ne pas dire mauvaises...). En effet, ce genre de détails stylistiques devrait être géré par de la CSS.


PHP :
- Comme l'a très justement suggéré coockiesh, $HTTP_POST_VARS est maintenant obsolète, il faut utiliser le tableau $_POST. Mais il serait de bon ton de vérifier si les indexes 'nom', 'email' et 'texte' sont définis avant d'assigner leur valeur à une variable.
- Il serait bien, avant d'envoyer le mail de vérifier si le paramètre magic_quotes_gpc est activé. Auquel cas, il faudrait mettre des striplashes à $nom, $email et $texte. (sinon notre mail aurait un aspect particulièrement "slashé")
- Au lieu d'utiliser la fonction strlen() pour vérifier si la taille de ta variable est supérieure à 1, je pense qu'il serait plus logique de vérifier s'il y a une chaîne de caractère dans tes variables en utilisant l'opérateur === ou !== faisant ainsi l'économie d'une fonction inutile.
- Dans tes trois if, tu répètes à chaque fois le lien de retour (avec un code html obsolète qui plus est). C'est inutile. Tu ferais mieux, pour éclaircir ton code, de séparer traitement et affichage en créant par exemple une variable $report qui ne contiendra que le message d'erreur, puis de n'envoyer le mail que si $report!=='' et d'afficher à la fin de ton script le message d'erreur et le lien le cas échéant.
- Et pour une histoire de compatibilité, il aurait été de bon ton de vérifier si la fonction mail ou email(hébergement free) existe. Pour ainsi utiliser la bonne.

Pour illustrer tous mes propos, j'affiche ce que j'aurais fait (le script est tellement court que j'ai pu me le permettre) :
http://monoceros01.free.fr/code.php?script=email


Enfin comme coockiesh l'a dit, il y a un fort risque de te faire spammer. Je peux facilement faire un script avec une boucle de 1000 itérations qui envoi des données par méthode POST à ton formulaire ce qui risque non seulement de fortement ralentir ton site, mais aussi de me permettre de te spammer en toute impunité!
Je déconseille donc d'utiliser ce script tel quel sur un site internet (Il faudrait éventuellement ajouter un système où l'on serait obligé de taper un code contenu dans une image générée dynamiquement)
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
4 nov. 2005 à 11:33
Salut!
Pas mal! Deux 'mais' cependant:
- on utilise $_POST['var'] et pas $HTTP_POST_VARS['var']

- je pense qu'un test anti flood (ip, cookies, ...) serait pas mal, ca éviterai que quelqu'un qui connait un rien de requêtes HTTP se serve de ce script, dispo sur un site, pour un spam collectif...

@++

R@f
jdalton42 Messages postés 200 Date d'inscription samedi 25 décembre 2004 Statut Membre Dernière intervention 19 août 2009
4 nov. 2005 à 10:43
assez bon code! en voyant dans le mail cotidien "envoi de mail sans logiciel" je me disais que s'etait encore un débutant qui avait posté un petit script avec simplement la fonction mail(); et un formulaire... je te mes 8/10!
cs_twisteurwin Messages postés 167 Date d'inscription mardi 21 septembre 2004 Statut Membre Dernière intervention 2 mai 2009
4 nov. 2005 à 09:43
Doogyice > C'est bien je t'ai noté 9/10, toutefois, ton formulaire ne risque pas trop d'avoir la côte parce qu'il existe déjà sur Cs en X copies.
Ce qui est intéressant c'est le passage des variables d'une page à l'autre... ca peut aider à comprendre le php pour les nouveaux/ débutants sur CS.

Mais, il y a un mais toujours ton code n'est pas très propre
- formulaire_courrier.html >
il faut corriger ton code html, mettre des "" (ex method="post"...) et aussi change tes
en

- confirmation.php >
précise plus l'entête, le sujet de ton émail pour qu'il soit plus comptatible :
( exemple )
$sujet = 'From:'.$email.'\nReply-To:'.$email.'\nContent-type: text/html \n';

+++
Twist
Rejoignez-nous