> Tous les forumsForum des Webmasters

 FormMail
Statut du sujet : NON RESOLU Imprimer
 rudiane
  Posté le 22/06/2003 @ 21:32  
 Petit astucien

61 Messages
Bonjour, Depuis quelques jours je ne recoit plus de courrier quand ca passe par un formulaire. Une erreur dans le formulaire? Quel-qu'un pourrait-il une fois verifier [rougir] Merci d'avance #!/usr/bin/perl ############################################################################## # FormMail Version 1.6 # # Copyright 1995-1997 Matt Wright mattw@worldwidemart.com # # Created 06/09/95 Last Modified 05/02/97 # # Matt's Script Archive, Inc.: http://www.worldwidemart.com/scripts/ # ############################################################################## # # # VERSION FRANCAISE PAR Sebastien Joncheray http://www.perl-gratuit.com # # Renommé formmail-vf.pl # # ############################################################################## # COPYRIGHT NOTICE # # Copyright 1995-1997 Matthew M. Wright All Rights Reserved. # # # # FormMail may be used and modified free of charge by anyone so long as this # # copyright notice and the comments above remain intact. By using this # # code you agree to indemnify Matthew M. Wright from any liability that # # might arise from its use. # # # # Selling the code for this program without prior written consent is # # expressly forbidden. In other words, please ask first before you try and # # make Money off of my program. # # # # Obtain permission before redistributing this software over the Internet or # # in any other medium. In all cases copyright and header must remain intact # ############################################################################## # Definition des Variables # # Informations Détaillées dans lisezmoi.txt # # $mailprog definit l'emplacement du programme unix sendmail # $mailprog = '/usr/lib/sendmail'; # @referers liste les noms de domaines autorisés à avoir un formulaire # # utilisant ce script # # Cette sécurité empêche n'importe qui d'utiliser votre script depuis leur # # serveur web # @referers = ('rudiane.be','rudiane.com','business-opportunitys.com'); # Terminé # ############################################################################## # Vérifie quel serveur demande ce script &check_url; # Obtient la date &get_date; # Récupère les données du formulaire &parse_form; # Vérifie les champs obligatoires &check_required; # Renvoie la page html ou redirige le visiteur &return_html; # Envoie l'E-Mail &send_mail; sub check_url { # Localise le flag check_referer qui détermine s'il faut valider l'appel # local($check_referer) = 0; # Si le referring URL est spécifié, pour chacun des @referers valides, # # s'assurer que c'est un referer URL valide qui appelle formmail-vf. # if ($ENV{'HTTP_REFERER'}) { foreach $referer (@referers) { if ($ENV{'HTTP_REFERER'} =~ m|https?://([^/]*)$referer|i) { $check_referer = 1; last; } } } else { $check_referer = 1; } # Si le HTTP_REFERER est invalide, renvoyer une erreur. # if ($check_referer != 1) { &error('bad_referer') } } sub get_date { # Definie le tableau des jours de la semaine et mois de l'année. # @days = ('Dimanche','Lundi','Mardi','Mercredi', 'Jeudi','Vendredi','Samedi'); @months = ('Janvier','Février','Mars','Avril','Mai','Juin','Juillet', 'Aout','Septembre','Octobre','Novembre','Décembre'); # Récupère la date courante et formatte l'heure, minutes et secondes. # # Ajoute 1900 à l'année pour avoir les 4 chiffres de l'année. # ($sec,$min,$hour,$mday,$mon,$year,$wday) = (localtime(time))[0,1,2,3,4,5,6]; $time = sprintf("%02d:%02d:%02d",$hour,$min,$sec); $year += 1900; # Formate la date. # $date = "$days[$wday] $mday $months[$mon] $year at $time"; } sub parse_form { # Definition du tableau associatif de configuration. # %Config = ('recipient','', 'subject','', 'email','', 'realname','', 'redirect','', 'bgcolor','', 'background','', 'link_color','', 'vlink_color','', 'text_color','', 'alink_color','', 'title','', 'sort','', 'print_config','', 'required','', 'env_report','', 'return_link_title','', 'return_link_url','', 'print_blank_fields','', 'missing_fields_redirect',''); # Determine la REQUEST_METHOD (GET ou POST) et sépare les champs de # # formulaires en paires nom-valeur. Si la REQUEST_METHOD est ni # # GET ni POST, renvoyer une erreur. # if ($ENV{'REQUEST_METHOD'} eq 'GET') { # Séparer les paires nom-valeur @pairs = split(/&/, $ENV{'QUERY_STRING'}); } elsif ($ENV{'REQUEST_METHOD'} eq 'POST') { # Lire les paramètres en entrée read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); # Lire les paires nom-valeur @pairs = split(/&/, $buffer); } else { &error('request_method'); } # Pour chaque paire nom-valeur: # foreach $pair (@pairs) { # Séparer la paire en 2 variables individuelles. # local($name, $value) = split(/=/, $pair); # Decoder l'encodage des données du nom et valeur. # $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # S'ils essaient de mettre des server side includes, les supprimer # pour éviter tout trou de sécurité si on renvoit une page html après. $value =~ s/<!--(.|\n)*-->//g; # Si le nom de champ est spécifié dans le tableau %Config, cela va # # renvoyer 1 pour defined($Config{$name}}) et on doit associer # # cette valeur à la variable de configuration appropriée. Si ce # # n'est pas un champ de configuration, la mettre dans le tableau # # associatif %Form, en la précédent de ', ' s'il y a déjà une valeur # # présente. On conserve également l'ordre des champs de formulaire # # dans @Field_Order pour utiliser cette ordre pour un tri générique. # if (defined($Config{$name})) { $Config{$name} = $value; } else { if ($Form{$name} && $value) { $Form{$name} = "$Form{$name}, $value"; } elsif ($value) { push(@Field_Order,$name); $Form{$name} = $value; } } } # Les six lignes suivantes enlèvent les espaces ou retour-chariot éventuels # en trop des variables de configuration,qui peuvent être là si l'éditeur html # ajoute des retours à la ligne au-delà d'une certaine longeur ou si vous # utilisez des espaces dans les noms de champs ou de variables d'environnement. $Config{'required'} =~ s/(\s+|\n)?,(\s+|\n)?/,/g; $Config{'required'} =~ s/(\s+)?\n+(\s+)?//g; $Config{'env_report'} =~ s/(\s+|\n)?,(\s+|\n)?/,/g; $Config{'env_report'} =~ s/(\s+)?\n+(\s+)?//g; $Config{'print_config'} =~ s/(\s+|\n)?,(\s+|\n)?/,/g; $Config{'print_config'} =~ s/(\s+)?\n+(\s+)?//g; # Sépare les variables de configuration dans des champs individuels. # @Required = split(/,/,$Config{'required'}); @Env_Report = split(/,/,$Config{'env_report'}); @Print_Config = split(/,/,$Config{'print_config'}); } sub check_required { # Localise les variables utilisées dans ce sous-programme. # local($require, @error); if (!$Config{'recipient'}) { if (!defined(%Form)) { &error('bad_referer') } else { &error('no_recipient') } } # Pour chaque champ obligatoire défini dans le formulaire: # foreach $require (@Required) { # Si le champ obligatoire est le champ email, vérifier la syntaxe # if ($require eq 'email' && !&check_email($Config{$require})) { push(@error,$require); } # Sinon, si le champ obligatoire est un champ de configuration et # # qu'il n'a pas de valeur ou n'est composé que d'espaces, erreur. # elsif (defined($Config{$require})) { if (!$Config{$require}) { push(@error,$require); } } # Si c'est un champ normal qui n'a pas été rempli, ou n'est composé # # que d'espaces, le signaler comme champ avec erreur. # elsif (!$Form{$require}) { push(@error,$require); } } # Si un champ avec erreur a été trouvé, renvoyer un message d'erreur. # if (@error) { &error('missing_fields', @error) } } sub return_html { # Variables locales utilisées dans ce sous-programme initialisées. # local($key,$sort_order,$sorted_field); # Si l'option redirect est utilisée, renvoyer l'en-tête de redirection. # if ($Config{'redirect'}) { print "Location: $Config{'redirect'}\n\n"; } # Sinon, commencer à afficher la page de réponse. # else { # Renvoyer l'en-tête HTTP et ouvrir les tags HTML. # print "Content-type: text/html\n\n"; print "<html>\n <head>\n"; # Afficher le titre de la page # if ($Config{'title'}) { print " <title>$Config{'title'}</title>\n" } else { print " <title>Merci</title>\n" } print " </head>\n <body"; # Récupération des attributs du tag Body # &body_attributes; # Fermer le tag Body # print ">\n <center>\n"; # Afficher le titre personnalisé ou celui générique. # if ($Config{'title'}) { print " <h1>$Config{'title'}</h1>\n" } else { print " <h1>Merci d\\'Avoir Rempli Ce Formulaire</h1>\n" } print "</center>\n"; print "Voici ce que vous avez soumis à $Config{'recipient'} le "; print "$date<p><hr size=1 width=75\\%><p>\n"; # Classer alphabétiquement si spécifié: # if ($Config{'sort'} eq 'alphabetic') { foreach $field (sort keys %Form) { # Si le champ a une valeur ou si l'option print blank fields # est activée, afficher les champs de formulaire et leurs valeurs if ($Config{'print_blank_fields'} || $Form{$field}) { print "<b>$field:</b> $Form{$field}<p>\n"; } } } # Si un ordre de tri est spécifié, classer les champs de formulaire en conséquence. elsif ($Config{'sort'} =~ /^order:.*,.*/) { # Définit la variable temporaire $sort_order avec l'ordre, # # enlève les retour-chariots et espaces en trop, enlève la directive # d'ordre et sépare les champs triés en un tableau. # $sort_order = $Config{'sort'}; $sort_order =~ s/(\s+|\n)?,(\s+|\n)?/,/g; $sort_order =~ s/(\s+)?\n+(\s+)?//g; $sort_order =~ s/order://; @sorted_fields = split(/,/, $sort_order); # Pour chaque champ trié, s'il a une valeur ou si l'option print # # blank fields est activée, afficher le nom du champ et sa valeur# foreach $sorted_field (@sorted_fields) { if ($Config{'print_blank_fields'} || $Form{$sorted_field}) { print "<b>$sorted_field:</b> $Form{$sorted_field}<p>\n"; } } } # Sinon, par défaut l'ordre est celui dans lequel les champs ont été envoyés else { # Pour chaque champ trié, s'il a une valeur ou si l'option print # # blank fields est activée, afficher le nom du champ et sa valeur# foreach $field (@Field_Order) { if ($Config{'print_blank_fields'} || $Form{$field}) { print "<b>$field:</b> $Form{$field}<p>\n"; } } } print "<p><hr size=1 width=75%><p>\n"; # Recherche si un lien de retour à été spécifié, et affichage si trouvé if ($Config{'return_link_url'} && $Config{'return_link_title'}) { print "<ul>\n"; print "<li><a href=\"$Config{'return_link_url'}\">$Config{'return_link_title'}</a>\n"; print "</ul>\n"; } # Affiche le bas de page. # print <<"(END HTML FOOTER)"; <hr size=1 width=75%><p> <center><font size=-1><a href="http://www.worldwidemart.com/scripts/formmail.shtml">FormMail</a> V1.6 © 1995 -1997 Matt Wright.A Free Product of <a href="http://www.worldwidemart.com/scripts/">Matt's Script Archive, Inc.</a><br> Version Française <a href="http://www.perl-gratuit.com">perl-gratuit.com</a> </font></center> </body> </html> (END HTML FOOTER) } } sub send_mail { # Localise les variables utilisées dans ce sous-programme. # local($print_config,$key,$sort_order,$sorted_field,$env_report); # Ouvrir le programme de Mail open(MAIL,"|$mailprog -t"); print MAIL "To: $Config{'recipient'}\n"; print MAIL "From: $Config{'email'} ($Config{'realname'})\n"; # Vérifier la présence d'un titre de l'email if ($Config{'subject'}) { print MAIL "Subject: $Config{'subject'}\n\n" } else { print MAIL "Subject: Formulaire envoyé du web\n\n" } print MAIL "Voici le résultat du formulaire envoyé par\n"; print MAIL "$Config{'realname'} ($Config{'email'}) le $date\n"; print MAIL "-" x 75 . "\n\n"; if (@Print_Config) { foreach $print_config (@Print_Config) { if ($Config{$print_config}) { print MAIL "$print_config: $Config{$print_config}\n\n"; } } } # Classer alphabétiquement si spécifié: # if ($Config{'sort'} eq 'alphabetic') { foreach $field (sort keys %Form) { # Si le champ a une valeur ou si l'option print blank fields # # est activée, afficher les champs de formulaire et leurs valeurs# if ($Config{'print_blank_fields'} || $Form{$field} || $Form{$field} eq '0') { print MAIL "$field: $Form{$field}\n\n"; } } } # Si un ordre de tri est spécifié, classer les champs de formulaire en conséquence. elsif ($Config{'sort'} =~ /^order:.*,.*/) { # enlève les retour-chariots et espaces en trop, enlève la directive # # d'ordre et sépare les champs triés en un tableau. # $Config{'sort'} =~ s/(\s+|\n)?,(\s+|\n)?/,/g; $Config{'sort'} =~ s/(\s+)?\n+(\s+)?//g; $Config{'sort'} =~ s/order://; @sorted_fields = split(/,/, $Config{'sort'}); # Pour chaque champ trié, s'il a une valeur ou si l'option print # # blank fields est activée, afficher le nom du champ et sa valeur # foreach $sorted_field (@sorted_fields) { if ($Config{'print_blank_fields'} || $Form{$sorted_field} || $Form{$sorted_field} eq '0') { print MAIL "$sorted_field: $Form{$sorted_field}\n\n"; } } } # Sinon, par défaut l'ordre est celui dans lequel les champs ont été envoyés else { # Pour chaque champ trié, s'il a une valeur ou si l'option print # # blank fields est activée, afficher le nom du champ et sa valeur # foreach $field (@Field_Order) { if ($Config{'print_blank_fields'} || $Form{$field} || $Form{$field} eq '0') { print MAIL "$field: $Form{$field}\n\n"; } } } print MAIL "-" x 75 . "\n\n"; # Envoyer les variables d'environnement. # foreach $env_report (@Env_Report) { if ($ENV{$env_report}) { print MAIL "$env_report: $ENV{$env_report}\n"; } } close (MAIL); } sub check_email { # Initialise la variable locale email avec le paramètre du sous-programme# $email = $_[0]; # Si l'adresse e-mail contient: # if ($email =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/ || # elle a une syntaxe invalide. Ou, si la syntaxe # # ne correspond pas à l'expression régulière , il y a échec à la # # vérification basique de syntaxe. # $email !~ /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/) { # La syntaxe basique requiert: un ou plusieurs caractères avant le @# # suivis par un '[' optionnel, puis n'importe quel nombre de lettres,# # chiffres, tirets ou points (caractères valides de domaine/IP) # # finissant par un point et 2 ou 3 lettres (suffixe de domaine) ou # # 1 à 3 chiffres (pour addresse IP). Un ']' est aussi autorisé car # # syntaxe valide pour les emails du style: user@[255.255.255.0] # # Retourne la valeur "false", puisque la vérification n'est pas ok # return 0; } else { # Retourne la valeur "true", vérification email ok # return 1; } } sub body_attributes { # Si attribut de couleur de fond if ($Config{'bgcolor'}) { print " bgcolor=\"$Config{'bgcolor'}\"" } # Si attribut d'image de fond if ($Config{'background'}) { print " background=\"$Config{'background'}\"" } # Si attribut de couleur de lien if ($Config{'link_color'}) { print " link=\"$Config{'link_color'}\"" } # Si attribut de couleur de lien visité if ($Config{'vlink_color'}) { print " vlink=\"$Config{'vlink_color'}\"" } # Si attribut de couleur de lien actif if ($Config{'alink_color'}) { print " alink=\"$Config{'alink_color'}\"" } # Si attribut de couleur de texte if ($Config{'text_color'}) { print " text=\"$Config{'text_color'}\"" } } sub error { # Localise les variables et paramètres du sous-programme. # local($error,@error_fields) = @_; local($host,$missing_field,$missing_field_list); if ($error eq 'bad_referer') { if ($ENV{'HTTP_REFERER'} =~ m|^https?://([\w\.]+)|i) { $host = $1; print <<"(END ERROR HTML)"; Content-type: text/html <html> <head> <title>Mauvais Référant - Accès Interdit</title> </head> <body bgcolor=#FFFFFF text=#000000> <center> <table border=0 width=600 bgcolor=#9C9C9C> <tr><th><font size=+2>Mauvais Référant - Accès Interdit</font></th></tr> </table> <table border=0 width=600 bgcolor=#CFCFCF> <tr><td>Le formualire tentant d'utiliser <a href="http://www.worldwidemart.com/scripts/formmail.shtml">FormMail</a> residant à <tt>$ENV{'HTTP_REFERER'}</tt>, n'est pas autorisé à accéder à ce script cgi.<p> Si vous essayez de configurer formmail-vf pour qu'il fonctionne avec ce formulaire, vous devez ajouter ce qui suit à \@referers, expliqué dans la fichier lisezmoi.txt.<p> Ajoutez <tt>'$host'</tt> au tableau <tt><b>\@referers</b></tt>.<hr size=1> <center><font size=-1> <a href="http://www.worldwidemart.com/scripts/formmail.shtml">FormMail</a> V1.6 © 1995 - 1997 Matt Wright. A Free Product of <a href="http://www.worldwidemart.com/scripts/">Matt's Script Archive, Inc.</a> <br>Version Française <a href="http://www.perl-gratuit.com">perl-gratuit.com</a> </font></center> </font></center> </td></tr> </table> </center> </body> </html> (END ERROR HTML) } else { print <<"(END ERROR HTML)"; Content-type: text/html <html> <head> <title>formmail-vf v1.6</title> </head> <body bgcolor=#FFFFFF text=#000000> <center> <table border=0 width=600 bgcolor=#9C9C9C> <tr><th><font size=+2>formmail-vf</font></th></tr> </table> <table border=0 width=600 bgcolor=#CFCFCF> <tr><th><tt><font size=+1>Copyright 1995 - 1997 Matt Wright<br> Version 1.6 - Released May 02, 1997<br> A Free Product of <a href="http://www.worldwidemart.com/scripts/">Matt's Script Archive, Inc.</a> <br>Version Française <a href="http://www.perl-gratuit.com">perl-gratuit.com</a> </font></center> </font></tt></th></tr> </table> </center> </body> </html> (END ERROR HTML) } } elsif ($error eq 'request_method') { print <<"(END ERROR HTML)"; Content-type: text/html <html> <head> <title>Erreur: Méthode de Requête</title> </head> <body bgcolor=#FFFFFF text=#000000> <center> <table border=0 width=600 bgcolor=#9C9C9C> <tr><th><font size=+2>Erreur: Méthode de Requête</font></th></tr> </table> <table border=0 width=600 bgcolor=#CFCFCF> <tr><td>La Méthode de Requête de votre formulaire ne correspond ni à <tt>GET</tt> ni à <tt>POST</tt>. Merci de vérifier votre formulaire et de vous assurer que le tag <tt>method=</tt> est en majuscules et correspond à <tt>GET</tt> ou <tt>POST</tt>.<p> <center><font size=-1> <a href="http://www.worldwidemart.com/scripts/formmail.shtml">FormMail</a> V1.6 © 1995 - 1997 Matt Wright. A Free Product of <a href="http://www.worldwidemart.com/scripts/">Matt's Script Archive, Inc.</a> <br>Version Française <a href="http://www.perl-gratuit.com">perl-gratuit.com</a> </font></center> </font></center> </td></tr> </table> </center> </body> </html> (END ERROR HTML) } elsif ($error eq 'no_recipient') { print <<"(END ERROR HTML)"; Content-type: text/html <html> <head> <title>Erreur: Pas de Destinataire</title> </head> <body bgcolor=#FFFFFF text=#000000> <center> <table border=0 width=600 bgcolor=#9C9C9C> <tr><th><font size=+2>Erreur: Pas de Destinataire</font></th></tr> </table> <table border=0 width=600 bgcolor=#CFCFCF> <tr><td>Aucun destinatire n'est spécifié dans les données envoyées à formmail-vf. Merci vous assurer que vous avez mis un champ 'recipient' avec une adresse e-mail. Davantage d'informations dans le fichier lisezmoi.txt.<hr size=1> <center><font size=-1> <a href="http://www.worldwidemart.com/scripts/formmail.shtml">FormMail</a> V1.6 © 1995 - 1997 Matt Wright. A Free Product of <a href="http://www.worldwidemart.com/scripts/">Matt's Script Archive, Inc.</a> <br>Version Française <a href="http://www.perl-gratuit.com">perl-gratuit.com</a> </font></center> </font></center> </td></tr> </table> </center> </body> </html> (END ERROR HTML) } elsif ($error eq 'missing_fields') { if ($Config{'missing_fields_redirect'}) { print "Location: $Config{'missing_fields_redirect'}\n\n"; } else { foreach $missing_field (@error_fields) { $missing_field_list .= " <li>$missing_field\n"; } print <<"(END ERROR HTML)"; Content-type: text/html <html> <head> <title>Erreur: Champs Obligatoires</title> </head> <center> <table border=0 width=600 bgcolor=#9C9C9C> <tr><th><font size=+2>Erreur: Champs Obligatoires</font></th></tr> </table> <table border=0 width=600 bgcolor=#CFCFCF> <tr><td>Les champs suivants n'ont pas été remplis dans le formulaire:<p> <ul> $missing_field_list </ul><br> Ces champs doivent être remplis pour que le formulaire soit soumis.<p> Merci d'utiliser le bouton de retour à la page précédente de vote navigateur pour revenir au formulaire et essayer à nouveau.<hr size=1> <center><font size=-1> <a href="http://www.worldwidemart.com/scripts/formmail.shtml">FormMail</a> V1.6 © 1995 - 1997 Matt Wright. A Free Product of <a href="http://www.worldwidemart.com/scripts/">Matt's Script Archive, Inc.</a> <br>Version Française <a href="http://www.perl-gratuit.com">perl-gratuit.com</a> </font></center> </font></center> </td></tr> </table> </center> </body> </html> (END ERROR HTML) } } exit; }
 Afficher le profil de rudiane Envoyer un message privé à rudiane
 
 
Publicité
 rudiane  Posté le 23/06/2003 à 22:37  
Petit astucien

61 Messages
Au secours !!!
Afficher le profil de rudiane Voir la configuration de rudianeEnvoyer un message privé à rudiane
 Revenir en haut de la page
Haut de la page 
Inscrivez-vous !
- Posez vos questions

- Résolvez vos problèmes

- Aidez les autres

- Participez et créez vos discussions

- Dialoguez en privé avec d'autres membres

- Suivez vos sujets préférés

- Affichez les signatures des membres

TOUT EST GRATUIT !

Je crée mon compte



Les sujets pertinents liés
Fromulaire et PHP.
formulaire a l'aide
formulaire php, de l'aide s'il vous plait...
script cgi
probleme de captcha
changé le corp d'un mail recçu
Formmail avec pièces jointe
Problème script formulaire php
Help formulaire !
Formulaire
Problème contrôle de formulaire en javascript
formmail erreur ?
Opera & formulaire pour courrier (résolu)
FormMail
Problème avec formulaire !
FormMail PHP (multi destinataire)
Formulaire PHP. FAI de l'emetteur.
Problémes Formmail
 
Vous avez besoin d'aide ?
Des centaines d'experts sont à votre disposition sur les forums PC Astuces pour vous aider gratuitement, 24h/24, 7j/7.

Les derniers sujets résolus !



 > Tous les forumsForum des Webmasters

 
Forum PC Astuces© 1997-2008 WebastucesAller en haut de la page