1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
| #!/usr/bin/perl
#---------------------------#
# DEBUT DE LA CONFIGURATION #
#---------------------------#
$mailCmd = '/usr/sbin/sendmail';
$page = "page.html";
$remerciement = "Votre message a bien été envoyé";
$confirm="non";
$texte_confirm = "Merci de confirmer l'envoi du fomulaire contenant les informations suivantes :<br><br><br>";
# Adresses des sites d'où l'execution de ce script est possible :
@sites =
(
'http://monsite.com',
);
#------------------------------------#
# Programme principale #
#------------------------------------#
if ($ENV{'HTTP_REFERER'})
{
foreach $executeur (@sites)
{
if ($ENV{'HTTP_REFERER'} =~ /$executeur/i) { $url_ok = '1'; last; }
}
}
else { $url_ok = '1'; }
if ($url_ok != 1) { &erreur ("Vous n'êtes pas autorisé à utiliser ce script à cette adresse<br><a href=$ENV{'HTTP_REFERER'}>$ENV{'HTTP_REFERER'}</a>"); }
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
if ($ENV{'QUERY_STRING'})
{$buffer = "$buffer\&$ENV{'QUERY_STRING'}";}
@pairs = split(/&/,$buffer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$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;
if ($name eq 'destinataire' && ($value))
{ $destinataire = $value; }
elsif ($name =~ /email/i && ($value)) { $expediteur = $value; $Form{$name} = "$value"; }
elsif ($name eq 'sujet' && ($value)) { $sujet = $value; }
elsif ($name eq 'confirm' && ($value)) { $confirm = $value; }
elsif ($name eq 'requis' && ($value)) { @requis = split(/\,/,$value); }
elsif ($Form{$name} && ($value)) { $Form{$name} = "$Form{$name}, $value"; }
elsif ($value) { $Form{$name} = $value; }
}
$domain = $ENV{'SERVER_NAME'};
$n_script = $ENV{'SCRIPT_NAME'};
$script ="http://$domain$n_script";
if (!$destinataire) { &erreur ("ERREUR : <br><br>Vous n'avez pas donné de destinaire dans votre formulaire<br>Veuillez verifier dans votre formulaire que le champs 'destinataire' y figure bien.<br><br>Utilisez la touche retour de votre navigateur pour retourner au formulaire."); }
elsif ($destinataire !~ /\S+?\@\S+?(\.\S+?)+/) { &erreur ("ERREUR : <br><br>Le format de l'adresse de destinataire de votre formulaire n'est pas valide.<br>Veuillez verifier dans votre formulaire que le champs caché 'destinataire' y figure bien ou qu'il ne comporte pas d'erreur.<br><br>Utilisez la touche retour de votre navigateur pour retourner au formulaire."); }
elsif (!$sujet) { $sujet = "Sujet non spécifié"; }
foreach $champs (@requis)
{
$champs =~ s/^\s+//;
$champs =~ s/\s+$//;
if (!$Form{$champs}) { $erreur++; $liste_champs .= "$champs "; }
}
if ($erreur == 1) { &erreur ("Le champs <b>$liste_champs</b> est obligatoire, mais vous ne l'avez pas remplis.<br><br>Utilisez la touche retour de votre navigateur pour retourner au formulaire."); }
elsif ($erreur > 1) { &erreur ("Les champs <b>$liste_champs</b> sont obligatoires, mais vous ne les avez pas remplis.<br><br>Utilisez la touche retour de votre navigateur pour retourner au formulaire."); }
if ($confirm =~ /oui/i)
{
$txt .= "$texte_confirm\n";
$txt .= "<FORM ACTION=$script METHOD=POST>\n";
$txt .= "<input type=hidden name=confirm value=1>\n";
$txt .= "<input type=hidden name=destinataire value=\"$destinataire\">\n";
$txt .= "<input type=hidden name=sujet value=\"$sujet\">\n";
$txt .= "<input type=hidden name=email value=\"$expediteur\">\n";
foreach $name (sort {uc($a) cmp uc($b)} keys %Form)
{
$Form{$name} =~ s'"'"'g;
$Form{$name} =~ s/\</</g;
$Form{$name} =~ s/\>/>/g;
$Form{$name} =~ s/\r\n/<BR>/g;
$txt .= "\n<input type=hidden name=$name value=\"$Form{$name}\">\n";
$txt .= "<b>$name</b> :<br>$Form{$name}<br><br>\n";
}
$txt .= "<input type=submit value=\"Confirmer l'envoi\">";
$_[0]="$txt";
&erreur;
}
open MAIL , "|$mailCmd -t" || &erreur ("Ne peux pas ouvrir $mailCmd!");
print MAIL "To: $destinataire\r\n";
print MAIL "From: $expediteur\r\n";
print MAIL "Subject: $sujet\r\n\n";
foreach $name (sort {uc($a) cmp uc($b)} keys %Form)
{
$Form{$name} =~ s'"'"'g;
$Form{$name} =~ s/</\</g;
$Form{$name} =~ s/>/\>/g;
$Form{$name} =~ s/<BR>/\n/g;
print MAIL "$name :\n$Form{$name}\n\n";
}
print MAIL "\n\n------------------------------------------------\n";
print MAIL "Adresse IP de l'expediteur : $ENV{'REMOTE_ADDR'}\n";
print MAIL "Navigateur utilisé : $ENV{'HTTP_USER_AGENT'}\r\n";
if ($referer) { print MAIL "Formulaire envoyé de : $ENV{'HTTP_REFERER'}\n"; }
close(MAIL);
&erreur ("$remerciement");
exit;
sub erreur
{
print "Content-type: text/html\n\n";
open(TEMPLATE,"$page");
while (<TEMPLATE>){ $template .= $_; }
close(TEMPLATE);
$template =~ s/%%%MESSAGE%%%/$_[0]/g;
print $template;
exit;
} |
Partager