[RESOLU][PHP] Formulaire d'envoi de mail (très) simple

Bonjour a tous,

Je cherche a faire pour mes petits sites, sans prétentions aucune, un petit formulaire de contact mail.

J’ai vu sur le net plusieurs exemple mais je ne trouve pas exactement ce que je veut (pourtant je veut faire simple) et étant une quiche (une vraie) en PHP je ne peut pas raisonnablement trop modifier la source.

Alors ce sera un formulaire en HTML tout simple : nom, email et message, qui m’envoie le message dans ma boite mail mais aucun champs ne sera obligatoire, par contre le sujet du message est prédéfini, une fois le mail envoyé l’internaute sera redirigé sur une page de confirmation d’envoi.

C’est hébergé chez Free et je ne sait pas si la fonction mail(), ou mail.pl (ou autre j’y connais rien) est activée.
Je sait pas si c’est mieux d’intégrer le PHP dans le HTML ou alors de faire un formulaire qui renvoi sur un mail.php a coté.

Si quelqu’un pourrait un peut me dépatouiller, m’expliquer ou même me faire une ébauche ce serait super sympa :crying:

Merci :slight_smile:

PS : Je précise que je me débouille un peut en HTML et pas du tout en PHP.

Juste les formulaires de contact c’est devenu la meilleure manière pour que je ne contacte pas la personne. Le nombre de fois où ca merde c’est simplement incroyable (aussi bien sur des sites persos que pros d’ailleurs), on n’a pas d’historique de qui on a contacté et pourquoi pour éventuellement pouvoir relancer (ou pas, évidemment). On ne sait même pas si le message est arrivé au destinataire ni qui est effectivement le destinataire. Je ne peux m’empécher de te conseiller de mettre simplement une adresse email poubelle (si tu ne veux pas filer la tienne), ou la tienne sous forme d’image (si tu veux éviter le spam) plutôt que cette solution bancale qui date d’y a 10 ans.

Néanmoins, si tu t’en tiens à cette mauvaise idée, sache quand même que les fonctions mail de PHP ne te confirment pas l’envoi effectif de l’email. Sinon voilà l’url d’un exemple simple qui devrait correspondre à ce que tu cherche : http://www.ibdhost.com/contact/

Merci pour l’info, mais c’est juste pour une sorte de boite a idée, ou contact rapide, je veut que ce soit simple, c’est juste pour envoyer quelques mots, et un mailto je préfèrerai éviter …

Sinon le lien que t’as passé est pas mal, mais encore trop éloigné de ce que je cherche (et surtout un peut trop complexe pour moi :slight_smile: )

Sinon en farfouillant ce que j’avais trouvé qui se rapproche le plus de ce que je cherche c’est ca :
[codebox]

Votre Nom:
Votre Email:
Sujet:
Commentaires:

-
[/codebox]

Le fichier PHP
[codebox]<?php
$TO = « votre adresse email »;

$h = "From: " . $TO;

$message = «  »;

while (list($key, $val) = each($HTTP_POST_VARS)) {
$message .= « $key : $val\n »;
}

mail($TO, $subject, $message, $h);

Header(« Location: http:// »);

?>
[/codebox]

Mais j’aimerais que l’internaute ne choisisse pas le sujet, est ce que ca suffit de virer la cellule de saisie du sujet et de codifier le PHP de cette facon :

mail($TO, MON SUJET PRÉDÉFINI, $message, $h);

Ce sera chez Free vous pensez que ca passera ?

[quote=« AcidBen, post:3, topic: 46859 »]Mais j’aimerais que l’internaute ne choisisse pas le sujet, est ce que ca suffit de virer la cellule de saisie du sujet et de codifier le PHP de cette facon :

mail($TO, MON SUJET PRÉDÉFINI, $message, $h);

Ce sera chez Free vous pensez que ca passera ?[/quote]
Oui et oui :slight_smile:

Evite de mettre le $TO en paramètre pour que l’on ne puisse pas envoyer des mails a volontée depuis ton serveur :slight_smile:

edit:
Ah en fait c’est pas le $TO mais le From: que tu passes (oui certes to/from ça dépend chez qui on se place) ;p

edit2:
Ahhh mais si j’suis pas fou… :crying: Tu utilises bien :
mail($TO, MON SUJET PRÉDÉFINI, $message, $h);

Je pense que tu as fait une erreur ici, tu voulais sans doute faire :
mail(« mon.addresse.a.moi@mail.org »,« Mon sujet »,$message,$h);

Attention pour l’header : pense à virer les \r\n de $h au cas où quelqu’un voudrait ajouter des champs au mail.

impacient, j’ai testé ca sur un autre serveur et … ca marche :crying:
et avec quelques petites modifs j’obtiens exactement ce que je veux… re- :cry:

[quote=« JDaM, post:5, topic: 46859 »]Evite de mettre le $TO en paramètre pour que l’on ne puisse pas envoyer des mails a volontée depuis ton serveur :stuck_out_tongue:
(Idem, charger tout le corps direct depuis le POST c’est… gnaa paranoia)

edit:
Ah en fait c’est pas le $TO mais le From: que tu passes (oui certes to/from ça dépend chez qui on se place) ;p
Mais ça change pas les remarques pour le données POST.[/quote]
Explique moi, ca m’intéresse.

Mon mail est sur le fichier PHP donc illisible depuis le net, non ?
Sinon le mail() de chez free quand on tente de mettre une adresse plus ou moins foireuse me met une erreur et n’envoi pas le mail, je trouve ca pas mal.

Désolé j’ai édité après ta réponse ;p

En fait je voulais te faire remarquer que tu utilises :
mail($TO, MON SUJET PRÉDÉFINI, $message, $h);

Je pense que tu as fait une erreur ici, tu voulais sans doute faire :
mail("mon.addresse.a.moi@mail.org",“Mon sujet”,$message,$h);

Attention pour l’header : pense à virer les \r\n de $h au cas où quelqu’un voudrait ajouter des champs au mail.

[quote=« JDaM, post:7, topic: 46859 »]Désolé j’ai édité après ta réponse ;p

En fait je voulais te faire remarquer que tu utilises :
mail($TO, MON SUJET PRÉDÉFINI, $message, $h);

Je pense que tu as fait une erreur ici, tu voulais sans doute faire :
mail(« mon.addresse.a.moi@mail.org »,« Mon sujet »,$message,$h);

Attention pour l’header : pense à virer les \r\n de $h au cas où quelqu’un voudrait ajouter des champs au mail.[/quote]
Le $TO est prédéfini plus haut, donc ca passe comme ca, si ca change rien au niveau « sécu » je laisserai dans l’état.

Sinon comment je peut changer ce que tu me dit dans $h ? (surement une question bete… :slight_smile: )

PS : Merci en tout cas de votre aide :crying:

En fait c’est le "From: ".$TO qui m’étonne car le champ From d’un mail permet de savoir qui a envoyé le mail.
Donc dans ce cas là tu t’envoie un mail à toi même en fait…
Alors c’est peut être le but mais ça m’étonne un peu :slight_smile:

Sinon faut juste éviter de passer directement des données de l’utilisateur à un fonction comme mail().
Mais si c’est toi qui contrôle $TO alors il n’y a pas de problème ;p

[quote=« JDaM, post:9, topic: 46859 »]En fait c’est le "From: ".$TO qui m’étonne car le champ From d’un mail permet de savoir qui a envoyé le mail.
Donc dans ce cas là tu t’envoie un mail à toi même en fait…
Alors c’est peut être le but mais ça m’étonne un peu :slight_smile:

Sinon faut juste éviter de passer directement des données de l’utilisateur à un fonction comme mail().
Mais si c’est toi qui contrôle $TO alors il n’y a pas de problème ;p[/quote]
Oui tu as raison :crying:
En effet je reçoit les mails de « moi même » vers « moi même »
Pour des test j’en ai fait des vides et ce cher Avast me les prend pour des mails suspects…
Je peut changer ça facilement ou c’est complexe ?

Faire comme tu l’as ditmail("mon.addresse.a.moi@mail.org","Mon sujet",$message,$h);Suffirait ?

EDIT :
Du coup je peut effacer cette ligne : $TO = « votre adresse email »; ?
Je met quoi dans le : $h = "From: " . $TO; a la place du $TO ?

Une possibilitée serait de demander à l’utilisateur son mail en envoyant le mesage.
Comme ça tu recevras les mails de la forme :

From: john@levisiteur.com To: moi@chez.moi Subject: Bidule préformaté

Ainsi on peut répondre directement, par contre il ne faut accorder aucune confiance au mail envoyé bien sur :slight_smile:

[code]$from = $_GET[‹ from ›];

// Teste si l’email est valide
if( !preg_match("/^[A-Za-z0-9._%±]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}$/",$from) )
{
echo « Pas valide ! Utilisateur vilain ! »;
}

$h = "From: ".$from;[/code]

Voilà :crying:

[quote=« JDaM, post:11, topic: 46859 »]Une possibilitée serait de demander à l’utilisateur son mail en envoyant le mesage.[/quote]Il y a deja un champ email dans le formulaire :

<td><input type=text name=email size=30></td></tr>ca suffit ??

[quote=« JDaM, post:11, topic: 46859 »][code]$from = $_GET[‹ from ›];

// Teste si l’email est valide
if( !preg_match("/^[A-Za-z0-9._%±]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}$/",$from) )
{
echo « Pas valide ! Utilisateur vilain ! »;
}

$h = "From: ".$from;[/code][/quote]Super le coup de verifier si le mail est valide (en tout cas bien formaté)

Si j’ai bien compris je met ton code a la place de :

$h = "From: " . $TO;

J’ai vraiment pas le niveau en PHP, mais au moins la c’est simple et je comprend a peut près ce que je fait :slight_smile:

Effectivement il suffira de passer le mail en GET par un formulaire ou un index.php?from=bla@ziou.viz

Et voilà :slight_smile:

[quote=« JDaM, post:13, topic: 46859 »]Effectivement il suffira de passer le mail en GET par un formulaire ou un index.php?from=bla@ziou.viz[/quote]Désolé si je fait le boulet là, mais je doit modifier mon code html pour ca ? :slight_smile:

Bon en tout cas super merci, ca marche je met le topic en resolu.
Le reste c’est du peaufinnage (ou de la peaufinnation au choix :crying: )

Bon j’ai un peut tripoté le code mais je n’arrive toujours pas a recevoir les mail depuis l’adresse de l’envoyeur mais ca arrive depuis l’adresse Free du compte en question… (je pense que c’est par défaut chez Free, si l’adresse du destinataire est manquante)

Et ca arrive toujours dans les spams (d’après moi ca viens d’un header SMTP mal formé)

Le PHP
[codebox]<?php

$TO = « mon_adresse@moi »;

$from = $_GET[‹ from ›];

if( !preg_match("/^[A-Za-z0-9._%±]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}$/",$from) )

{
Header(« Location: http://…MAUVAIS_MAIL.html »);
}

$h = "From: ".$from;

$message = «  »;

while (list($key, $val) = each($HTTP_POST_VARS)) {
$message .= « $key : $val\n »;
}

mail($TO, SUJET_PREDEFINI, $message, $h);

Header(« Location: http://…MAIL_ENVOYE.html »);

?>[/codebox]

Le HTML
[codebox]

Name :
E-mail :

[/codebox]

Ca doit être super simple mais je sait pas comment lui faire savoir que $from = le champ « email » du formulaire.

Pourquoi ne peut t’on pas remplacer

mail($TO, SUJET_PREDEFINI, $message, $h);par

mail($TO, SUJET_PREDEFINI, $message, $from);

Bonne année a tous :slight_smile:

EDIT : il semblerai aussi que if( !preg_match("/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/",$from) ) { Header("Location: http://...MAUVAIS_MAIL.html"); }soit mal formaté, mais ca marchais avec echo comme tu me l’avais dit…
on peut pas utiliser une redirection avec ? ou je m’y prend mal ?

J’suis pas certain de tout comprendre mais le mieux ça serait que tu postes le header du mail que tu reçois…

Pour un message envoyé depuis le site je reçoit le header : Return-Path: <monsite@free.fr> Delivered-To: online.fr-monsite@free.fr Received: (qmail 19463 invoked from network); 1 Jan 2008 23:36:46 -0000 Received: from 212.27.63.203 (HELO perso1.free.fr) (212.27.63.203) by mrelay2-g25.free.fr with SMTP; 1 Jan 2008 23:36:46 -0000 Received: from localhost.localdomain (localhost [127.0.0.1]) by perso1.free.fr (Postfix) with ESMTP id CD78BA5E46A for <monsite@free.fr>; Wed, 2 Jan 2008 00:36:46 +0100 (MET) XPARM: monsite.free.fr XPARAM2: 82.228.IP.IP Subject: SUJET PRÉDÉFINI From: monsite@free.fr Date: Wed, 02 Jan 2008 00:36:46 To: monsite@free.fr Message-Id: <20080101233646.CD78BA5E46A@perso1.free.fr>

Wala :slight_smile:

PS : dit moi si c’est irréalisable je laisserai comme ça et ferait une règle dans Outlook :crying:
PS² : Bonne année !!!

Avec From == To c’est normal que ton client mail détecte ça comme un spam.

J’avais pas fait attention au fait que tu envoyais en POST, le code PHP en correspondance de ton HTML sera :

[code]<?php

$TO = « mon_adresse@moi »

$from = $_POST[‹ email ›];

if( !preg_match("/^[A-Za-z0-9._%±]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4}$/",$from) )
{
echo « Pas bon! »;
}

$h = "From: ".$from;

$message = « De la part de « .$_POST[‹ nom ›]. »\n\n »;
$message .= $_POST[‹ comments ›];

mail($TO, SUJET_PREDEFINI, $message, $h);
?>[/code]

ça devrait aller beaucoup mieux :slight_smile:

Super merci beaucoup

Je t’embêterai plus promis :slight_smile: