envoyer un formulaire HTML sans logiciel de messagerie

danny

Membre actif
20 Septembre 2004
147
0
50
Bonjour

je souhaite creer un formulaire en html dans une page html, mais je souhaiterais qu'il soit envoye directement depuis le site, sans qu'il ne m'ouvre un logiciel de messagerie quand je clique sur envoi.
Tout d'abord est-ce possible? Sinon comment dois-je faire? (je n'ai pas trouve la reponse en faisant recherche sur le site de mac generation)
Ensuite, j'ai lu dans un post sur le sujet que les formulaires html etaient "depasses"... pourquoi?
Enfin, dans les proprietes de mon bouton, je lui donne le nom: "OK" mais a l'affichage, il y a toujours le nom "submit" qui apparait, c'est curieux... auriez-vous une explication svp?
merci d'avance
 
<form action="mailto:[email protected]?subject=Le sujet;[email protected]" method="post" enctype="text/plain">

<i>Si vous souhaitez nous laisser un message...</i> <br>
<textarea name="Commentaire" rows="5" cols="50" wrap="PHYSICAL"></textarea><br>
<input value="Envoyer" type="submit">
<input value="Annuler" type="reset">

</form>
 
merci olivier pour ta reponse concernant le nom des boutons, en fait il faut changer "value" directement dans le code, car l'inspecteur de proprietes de dreamweaver ne fonctionne pas (chez moi en tout cas). Par contre, est ce que ta 1ere ligne
<form action="mailto:[email protected]?subject=Le sujet;[email protected]" method="post" enctype="text/plain">
me permet de resoudre le probleme de la messasgerie? car il me semble que le mailto fait justement appel a un programme de mail non?
 
... Oui, mais... Non. Il était précisé "sans qu'il ne m'ouvre un logiciel de messagerie quand je clique sur envoi".

Il est nécessaire de passer par un système de messagerie à un moment ou à un autre.

Par exemple, Free permet d'héberger et de faire tourner des scripts PHP qui peuvent envoyer directement des e-mails quand on les appelle.

Le script PHP forme l'entête et le corps du message à partir des paramètres d'appels remplis par l'utilisateur dans une <FORM> (comme ci-dessus, mais avec l'URL du script à la place de "mailto:..."), puis il appelle la fonction "mail(adresse, sujet, message, entête);" fournie par Free.

J'en déjà fait un, et ça marche bien. Ça me permet même d'envoyer des pièces jointes en upload. J'avais trouvé toutes les informations nécessaires sur le site de Free.

Je pense qu'il est possible de faire pareil sur n'importe quel serveur Web où le PHP et la fonction "mail()" sont activés.
 
PA5CAL a dit:
... Oui, mais... Non. Il était précisé "sans qu'il ne m'ouvre un logiciel de messagerie quand je clique sur envoi".

Il est nécessaire de passer par un système de messagerie à un moment ou à un autre.

Par exemple, Free permet d'héberger et de faire tourner des scripts PHP qui peuvent envoyer directement des e-mails quand on les appelle.

Le script PHP forme l'entête et le corps du message à partir des paramètres d'appels remplis par l'utilisateur dans une <FORM> (comme ci-dessus, mais avec l'URL du script à la place de "mailto:..."), puis il appelle la fonction "mail(adresse, sujet, message, entête);" fournie par Free.

J'en déjà fait un, et ça marche bien. Ça me permet même d'envoyer des pièces jointes en upload.

J'avais trouvé toutes les informations nécessaires chez Free.

hum.... je ne comprends pas bien ton explication desole... :rose:
qu'il faille passer par un systeme de messagerie ok, ca semble logique, mais j'aimerais que ca puisse se faire de facon transparente, sans qu'il n'ouvre le programme comme avec un mailto.
j'ai lu sur un bouquin qu'il fallait creer une page en .php specialement pour traiter le formulaire, est-ce exact? (auquel cas je vais etre bloque vu que je ne connais que tres peu le php)
sinon je regarde ce systeme chez free de suite
 
Désolé si ce n'est pas très clair.

Le principe, c'est :
- une première page purement HTML et contenant un formulaire (<FORM>...</FORM>) permet à l'utilisateur de saisir son message
- la validation du formulaire appelle un script PHP, qui fabrique l'email à partir des données saisies par l'utilisateur et l'envoie au serveur SMTP par le bias d'une fonction "mail(...)", puis retourne la page HTML suivante à l'utilisateur (avec un texte du style "Message bien envoyé", par exemple).


Voici un exemple de script PHP (à adapter selon son cas):
Bloc de code:
<?php

   $boundary = '--' . md5( uniqid("myboundary") );
   $sep = chr(13) . chr(10);

// Adresse de réception
   $email = "[email protected]";   

   $from = $_POST['from'];
   if ( $from=="" )
      $from = "[email protected]";   

   $subject = $_POST['subject'];
   if ( $subject=="" )
      $subject = date("d/m/Y G:i:s",mktime());

   $nprio = $_POST['priority'];
   if ( $nprio=="1" )
      $priority = "1 (Highest)";
   else
   if ( $nprio=="2" )
      $priority = "2 (High)";
   else
   if ( $nprio=="4" )
      $priority = "4 (Low)";
   else
   if ( $nprio=="5" )
      $priority = "5 (Lowest)";
   else
      $priority = "3 (Normal)";

   $header .= "From: $from\n";
   $header .= "X-Priority: $priority\n";
   $header .= "Mime-Version: 1.0\nContent-Type: multipart/mixed;\n boundary=\"$boundary\"\n"; 
   $header .= "Content-Transfer-Encoding: 8bit\n";
   $header .= "X-Mailer: PhpMailer\n";
   $message .= "This is a multi-part message in MIME format.\n";

   $message .= "--$boundary\n";

   $message .= "Content-Type: text/plain; charset=iso-8859-1\n";
   $message .= "Content-Transfer-Encoding: 8bit\n";

// Ici, constitution du message
   $message .= "\n" . $_POST['text'] . "\n\n";

   $filename = $_FILES['attachment']['name'];
   $filetype = $_FILES['attachment']['type'];

// Pièce jointe
   if ( $filename != "" ) {
     $message .= "--$boundary\n";

     $message .= "Content-type: $filetype ;\n";
     $message .= " name=\"$filename\"\n";
     $message .= "Content-Transfer-Encoding: base64\n";
     $message .= "Content-Disposition: inline;\n";
     $message .= " filename=\"$filename\"\n";
               
     $linesz = filesize( $_FILES['attachment']['tmp_name'] ) + 1;
              
     $fp = fopen( $_FILES['attachment']['tmp_name'], 'r' );
     $content = chunk_split( base64_encode( fread( $fp, $linesz ) ) );
     fclose( $fp );

     $message .= $sep.$content;
   }                   

   $sended = mail($email, $subject, $message, $header);
   if ($sended) {

// Ici, page de retour quand l'envoi a été effectué
   ...

   } else {

// Ici, page de retour en cas d'erreur
   ...

   }
 
?>

La page d'appel en HTML ressemble à ça :
Bloc de code:
<html>

<body>


<form enctype="multipart/form-data" action="http://monsite.free.fr/monscript" method="post">

Exp&eacute;diteur :<br>
<input name="from" type="text" value="" size="50">
<br><br>

Sujet :<br>
<input name="subject" type="text" value="" size="50">
<br><br>

Importance :<br>
<input name="priority" type="text" value="" size="2">
<br><small>de 1 (haute) &agrave; 5 (basse). 3 par d&eacute;faut</small>
<br><br>

Texte :<br>
<textarea name="text" cols="50" rows="10" wrap="virtual">
</textarea>
<br><br>

Fichier joint:<br>
<input name="attachment" type="file">
<br><br>

<input type="submit" value="Envoyer">

</form>

</body>
</html>
 
merci pour ta reponse Pascal
j'ai essaye d'etudier un peu le code que tu me proposes, mais pour le moment je reste perdu
Neammoins je me servirai de ton exemple lors de mon prochain cours sur le php, car pour le moment meme si je comprends un minimum de choses, je ne suis pas encore operationnel. Merci quand meme
 
A priori, tu n'a pas besoin toi de savoir le php, c'est juste un exemple de script utilisé par l'hebergeur.
 
Warflo a dit:
A priori, tu n'a pas besoin toi de savoir le php, c'est juste un exemple de script utilisé par l'hebergeur.
En fait si, parce que le script en question n'est pas fourni par l'hébergeur (en tout cas c'est comme ça chez Free), et doit donc être fabriqué par l'hébergé et déposé sur son site perso.
 
danny a dit:
par quoi doit-on remplacer les ... ?
Par du code à exécuter, selon le cas.

Par exemple:

Bloc de code:
   $sended = mail($email, $subject, $message, $header);
   if ($sended) {
         print "Votre message est bien parti.";
   } else {
         print "Une erreur s'est produite pendant l'envoi de votre message.";
   }
 
PA5CAL a dit:
$from = $_POST['from'];
(entre autres, c'est valable pour chaque récupération de variable...)

Désolé de donner des conseils, alors que mon formulaire d'envoi de messages ne fonctionne pas... :rose:
Mais sur Le site du zéro, ils conseillent (et même ils insistent sur ce problème) de toujours utiliser ce code lorsqu'on récupère une variable postée par un utilisateur...

Bloc de code:
 $from=htmlentities($_POST['from'], ENT_QUOTES);

En fait, il permet de détruire le code HTML que le "posteur" a éventuellement inséré dans le formulaire. Il évite ainsi de lancer à notre insu un code qui viendrait (par exempe) récupérer toutes nos infos, nos mots de passes et plein d'autres trucs que je ne sais pas de quoi il s'agit, mais enfin bref, il parait que ça évite que des hackers viennent te bousiller ton Mac tout neuf (ou plus vieux) donc moi, je le mets... A bon entendeur

Enfin, j'espère que ce n'est pas à cause de ça que mon formulaire ne marche pas :siffle:
 
Dans mon cas, en l'occurence, c'est le serveur de l'hébergeur sur lequel tourne le script PHP qui risque de se faire hacker...

Je n'ai pas essayé, mais je pense que l'emploi de "htmlentities()" n'empêche en rien l'envoi du mail.

En revanche, je ne connais pas l'incidence de cette fonction sur la transmission des fichiers mis en pièces jointes, par exemple. Mais là ce n'est plus qu'une question de contenu reçu par le destinataire du mail.
 
PA5CAL a dit:
Dans mon cas, en l'occurence, c'est le serveur de l'hébergeur sur lequel tourne le script PHP qui risque de se faire hacker...

Ca c'est pas très gentil pour eux ! :mouais:

Enfin moi, je ne comprend pas. Je n'ai pas pris exactement ton code, d'une part parce que je ne le comprend pas, d'autre part parce que je veux un truc bien personnalisé (et sans pièces jointes) et que modifier un code dont on ne pige pas tout, c'est pas tellement conseillé. Je fais deux tests différents pour afficher un message en fonction de la situation. Un sur le fait que les champs "email" (j'aime pas les anonymes), "sujet" et "message" soient remplis et un qui est le même que le tien, à savoir :
Bloc de code:
 $sended=mail($envoi, $sujet, $message);
 if ($sended)
 {
  echo "Votre message a bien &eacute;t&eacute; envoy&eacute;. Merci de votre visite.";
 }
 else
 {
 echo "Echec lors de l'envoi du message";
 }

Mais il m'envoie toujours "Votre message a bien été envoyé. Merci de votre visite." alors que si je vais voir sur mon mail, y'a que dalle qui a été envoyé... :confused: (ce n'est pas une question de temps, puisque j'ai déjà essayé d'envoyer des trucs hier soir et... bah aujourd'hui, toujours rien...

Est-ce que tu as une idée ?

Aussi, j'ai vu dans Comment ça marche? qu'on a différentes options sur la fonction mail()
Le champ options de la fonction mail permet d'ajouter une en-tête au message que l'on envoie. On peut par exemple y mettre la date, le logiciel utilisé pour envoyer l'email ou encore l'adresse de retour...
Voilà un exemple d'en-tête à utiliser lors d'un envoi de mail :


$from_email = "[email protected]";

$entetedate = date("D, j M Y H:i:s -0600"); // Offset horaire

$entetemail = "From: $from_email \n"; // Adresse expéditeur

$entetemail .= "Cc: \n";

$entetemail .= "Bcc: \n"; // Copies cachées

$entetemail .= "Reply-To: $from_email \n"; // Adresse de retour

$entetemail .= "X-Mailer: PHP/" . phpversion() . "\n" ;

$entetemail .= "Date: $entetedate";

Mais ce n'est pas possible de mettre le mail du gars qui envoie un message dans la rubrique "mail" de mon logiciel "Mail"??? Ou alors comment lui dire que la variable que je lui indique est le mail, la date, ou autre chose?

Merci
 
Si la fonction "mail()" retourne un code correctement, ça ne signifie pas pour autant que tout le système de messagerie du serveur fonctionne bien derrière. Je pense que le problème vient probablement de là (SMTP).

Le principe de fonctionnement de la messagerie via PHP fait que l'expéditeur n'est autre que le serveur HTTP. L'utilisateur qui, par sa requête, fait tourner le script d'envoi, n'est pas identifié autrement que par une adresse IP de connexion, et d'autres paramètres issus de HTTP (HTTP_COOKIE, HTTP_USER_AGENT, etc.). En aucun cas on n'aura accès à son adresse de messagerie (s'il en a une) autrement qu'en la lui demandant et en mettant sa réponse (vraie ou fausse) dans les champs "From:" et "Reply-To:". L'identification de l'expéditeur ne peut donc pas être fiable.

Dans mon cas, j'ai fait un script PHP sur free.fr que je suis seul à utiliser, dont l'existance est indétectable pour un surfeur non averti, et qui est limité à ma seule boîte de réception (destinataire en dur dans le code, non modifiable). Le script est d'ailleurs agrémenté de verrous (que je n'ai pas reproduits dans le code que je vous ai donné) afin d'interdire son usage par une personne non autorisée, si cela devait arriver. J'évite ainsi le risque de voir spammer ma boîte de réception avec mon propre script.
 
PA5CAL a dit:
Dans mon cas, j'ai fait un script PHP sur free.fr que je suis seul à utiliser, dont l'existance est indétectable pour un surfeur non averti, et qui est limité à ma seule boîte de réception (destinataire en dur dans le code, non modifiable). Le script est d'ailleurs agrémenté de verrous (que je n'ai pas reproduits dans le code que je vous ai donné) afin d'interdire son usage par une personne non autorisée, si cela devait arriver. J'évite ainsi le risque de voir spammer ma boîte de réception avec mon propre script.

Waoh !! Tu ne peux pas t'arrêter là, il faut donner la combine ! ;)
Enfin avant ça, faudrait faire plus simple... Tu n'as pas une idée de pourquoi mon formulaire n'envoie pas mes mails?... :rolleyes: Bon d'accord, je reprend ton script et j'essaie de le modifier pour en faire ce que je veux, mais c'est pas gagné :rose:
 
Bonsoir à toutes et tous :)

Nous avons acheté Rapidweaver pour nous construire un joli website.
Tout va bien, sauf:

Impossible de créer une page contact eet de l'exporter sur .mac

Problème PHP ????

Merci de me donner vos trucs et astuces
 
Yaaaaaaaahouuuuuuuuuuu !! :D
Ca marche en fait ! Encore un truc que je ne comprend pas bien. Mon site est http://fratelibenar.free.fr. J'ai un autre site sur lequel je fais des tests avant de mettre une nouveauté sur le vrai site, ça m'évite de faire des conneries irréparables sur mon site... Ca site de tests est hébergé par iFrance qui rajoute un bandeau de pub sur le haut (est-ce dû à ça :confused:). Enfin le fait est que quand quelque chose ne veut pas fonctionner et que je ne parviens pas à en trouver la raison, je fait une sauvegarde de mon site dans un dossier sur mon Mac et je fais un essai de mes modifs sur mon vrai site. Et ben là, en général, ça marche ! :)
C'est à n'y rien comprendre mais c'est bien comme ça. C'est décidé, je vais demander une nouvelle page perso à Free pour en faire mon site TEST. Ainsi, je n'aurais plus à m'emmerder avec ces c....... d'iFrance !

Pochtroi a dit:
Waoh !! Tu ne peux pas t'arrêter là, il faut donner la combine ! ;)

Cela ne retire pas ma requête quant à ta technique de cryptage de mail, Pa5cal !... sauf bien sûr si ça permettrait aux hackers de contourner ta combine !
J'avais pensé à insérer dans le formulaire une rubrique cachée où se trouve mon email, dans ce cas, il est toujours inscrit dans le code source... :nailbiting: