> Tous les forumsForum des Webmasters

 Problémes Formmail
Statut du sujet : NON RESOLU Imprimer
 rudiane
  Posté le 27/06/2003 @ 07:27  
 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 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
 
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
Problémes Formmail
avis aux utilisateurs IE6 et inferieur
mon site !!!
Problemes d'affichage sous Firefox
Iframe et css = problèmes
Fromulaire et PHP.
Aide debutant dreamweaver
formulaire a l'aide
formulaire php, de l'aide s'il vous plait...
Deconnection de FileZilla
script cgi
création 1er site et PROBLEMES
probleme de captcha
changé le corp d'un mail recçu
session pas vraiment fermée
Encore et toujours des différence IE/Firefox
besoin d'aide pour ameliorer un site
 
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