8792 sujets

Développement web côté serveur, CMS

Bonjour à tous Smiley smile

Via ce tutoriel, j'ai fait un mailer en php pour mon site...

Seulement, il n'agit pas tout à fait comme je le voudrais... Dans le sens où lorsque le mail est envoyé (ou pas), une page vierge apparait avec un message selon le statut du mail... Je voudrais que ce statut (donc la p'tite phrase qui dit que c'est envoyé (ou pas)) apparaisse sur le formulaire lui-même... Seulement voilà, j'y connais pas grand chose en php, je comprends plus ou moins mes copier/coller mais je suis incapable de produire moi-même du code...

Aussi, lorsque le message contient des apostrophes, dans la réception du mail je vois des antislashs... Par exemple, "j'aime les légumes" (même si c'est pas vrai) donne "j\'aime les légumes"... J'voudrais pouvoir corriger ça également...

J'ai vu que Whisno (salut à lui en passant Smiley lol ) avait le même problème concernant l'affichage du message d'erreur directement sur le formulaire, seulement le language employé sur son topic est trop technique pour moi...

Si quelqu'un pouvait un peu m'aider là dessus, ce serait sympa... Smiley murf

PS : Là, à chaud, vous pensez quoi de la demi-interface du site en question ?
Modifié par SolykZ (18 Jan 2007 - 19:06)
Administrateur
Bonjour,

1er problème>
a écrit :
Valeurs de retour

Retourne TRUE si le mail a été accepté pour livraison, FALSE sinon.

http://fr.php.net/manual/fr/function.mail.php

Donc une suite d'instructions telle que:
$retour = mail($riri, $fifi, $loulou);
if($retour == TRUE) {
echo '<p>Mail bien envoyé!</p>';
}
else {
echo '<p>Houston, we've got a problem!</p>';
}

te permettra d'afficher si oui ou non le mail a pu être traité par ton serveur.

EDIT: et avec ça tu pourras fournir un utile formulaire à spam, vu l'absence de sécurité sur la variable $body/$message Smiley murf (ou alors les guillemets autour de $message garantissent le retour de l'être aimé pitêtre?)
Modifié par Felipe (18 Jan 2007 - 15:30)
Je teste pour voir...

Quant à la sécurité, je préfère m'en occuper après, pour pas tout mélanger et risquer de m'embrouiller...

Ceci dit, s'tu pouvais m'en dire plus, ça m'intéresse Smiley smile

Merci Smiley smile

<edit>
En fait non, j'teste pas, parce que j'ai rien compris ! J'connais rien en PHP, et concernant le retour sur php.net, ça dit juste "Retourne TRUE si le mail a été accepté pour livraison, FALSE sinon. Il est important de noter que ce n'est pas parce que le mail a été accepté pour livraison qu'il arrivera à destination."

Pas très indicatif, si tu vois c'que j'veux dire Smiley lol
</edit>
Modifié par SolykZ (18 Jan 2007 - 15:46)
En regardant, j'ai déjà un retour, sauf qu'il faudrait qu'il se retourne sur le formulaire, et pas sur une page blanche... Smiley lol
Y'a effectivement une énorme faille de sécurité dans leur script : ils mettent le résultat de $_POST['mail'] directement dans les headers, sans vérification. Du coup en mettant un truc bien précis dedans, on peut envoyer un mail à qui on veut (même à tout une liste), et donc transformer le formulaire en robot à spam...

Je conseille fortement de changer de tutoriel Smiley decu
Aie... J'comprends pas trop d'quoi vous parlez, vu que j'y connais pas grand chose... Vous auriez un bon tuto pour moi svp ? J'ai d'ja galéré pour en trouver un qu'allait... Smiley decu
Est-ce que celui-ci pourrait faire l'affaire svp ? Il a l'air simple à mettre en oeuvre, mais niveau sécurité je ne peux pas juger...

Merci d'avance Smiley smile
Administrateur
Pour la sécurisation (ça peut en effet être vu dans un deuxième temps, une fois que le formulaire fonctionne au moins dans tes tests), cet article explique en couleur le problème:
http://www.phpsecure.info/v2/article/MailHeadersInject.php
(il y a une suite sur le même site je crois)
Les solutions sont jamais simples mais il faut au moins être conscient du problème que représente un tel formulaire Smiley cligne
Donc pour sécuriser la chose, je devrais remplacer

$headers .= "From: $nom <$mail>\r\nReply-to : $nom <$mail>\nX-Mailer: PHP";


par

$headers .= "From: $nom <$mail>\r\nReply-to : $nom <$mail>\nX-Mailer: PHP"; 
if (eregi("\r",$from) || eregi("\n",$from)){
die("Why ??");
}


?
Modifié par SolykZ (18 Jan 2007 - 19:04)
J'viens d'en trouver un, il a l'air bon :

http://www.stadtaus.com/fr/php_scripts/formmail_script/


Liste des fonctionnalités

* Traitement des données de formulaires et envoi par e-mail
* Gestion de plusieurs formulaires avec le même script
* Personnalisation de l'aspect du site à l'aide de modèles
* Personnalisation de l'aspect de l'email à l'aide de modèles
* Envoi d'emails au format texte ou HTML
* E-mail message logging feature
* Fonctionnalités de sécurité contre les spammers
* Visualisation des données (optionnel)
* Affichage d'un message après envoi de l'email ou
* Redirection sur une page de remerciements
* Fichiers langues disponible en: Français, Allemand, Suédois, Espagnol
Salut,

Ouais ça a l'air plutôt balèze... Et en matant un peu la source, j'ai vu que ça utilise la fonction preg_match() pour valider l'adresse email.
Et moi, j'aimerais juste comprendre comment marche précisément cette fonction, mais avec un exemple donné, celui-là :

if(preg_match("/^([a-zA-Z0-9!#&'*\-=?{}_~]+\.)*[a-zA-Z0-9!#&'*\-=?{}_~]+@([a-zA-Z0-9!#&'*\-=?{}_~]+\.)+[a-zA-Z0-9!#&'*\-=?{}_~]+$/",$email)){
// Voir la RFC 822 and 2822
	echo("adresse mail correcte");
}else{
	echo("adresse mail incorrecte");
}


Alors, je sais très bien que le preg_match() compare la variable $email avec le panel de caractères proposés en 1er argument. Mais ce que je ne capte pas du tout, c'est la construction de ce 1er argument... C'est à dire que signifie les +, les *, les \, etc... ? Et donc par exemple, si on voulait adapter le preg_match pour valider un champ composé uniquement de chiffres, ou bien encore uniquement de lettres (sans ponctuation) comment s'y prendrait-on ?


EDIT : Bon, on est toujours mieux servi par soi-même : des explication super claires ici
Modifié par ZeB_panam (06 Feb 2007 - 16:11)