Tutor NumaBoaO SCRIPT COMPLETO
Tutorial Perl CGI - 8
Silício NumaBoa



Final do tutorial e hora de dar uma olhada no script completo e sem a numeração de linhas. Além disso, para não perder o fio da meada, um fluxograma da arquitetura do script mailMan.cgi.



Fluxograma da arquitetura de mailMan.cgi
Fluxograma


O script mailMan.cgi completo

#!/usr/local/bin/perl
#########################################################################
#
# mailMan.cgi - versão 1.0
# by vickisoft 1999 - webmaster arroba numaboa.com
#
# Uma referência ou um link para
# http://www.numaboa.com/informatica/tutor/cgiPerl/
# será muito apreciado (e fará um bem danado ao meu ego ;-)
#
# Chamar script com:
#   <a href="../diretórioCGI/mailMan.cgi?enviar=webmaster&topico=algo></a>
#
#########################################################################

# ####################
# Variáveis configuráveis
# ####################

# endereços de email
$masterEmail = "webmaster\@numaboa.com.br";

# Imagens nas páginas dinâmicas
$imgLogo = "suaLogo.gif";
$imgFundo = "seuFundo.jpg";

# Referências da URL da Home Page
$urlHP = "http://www.numaboa.com.br";

# ###########
# Variáveis do script
# ###########

$programaMail = "/usr/lib/sendmail -t";

# #############################
# Script
# #############################

&pegaInput;
$topico = $campo{'topico'};
$topico =~ s/%20/ /g;

if ($ENV{'REQUEST_METHOD'} eq 'GET') {
   fazMaster();
}

if ($ENV{'REQUEST_METHOD'} eq 'POST') {
  &mandaMaster;
}

sub pegaInput {
   (*fval) = @_ if @_ ;
   local ($buf);
   if ($ENV{'REQUEST_METHOD'} eq 'POST') {
      read(STDIN,$buf,$ENV{'CONTENT_LENGTH'});
   } else {
      $buf=$ENV{'QUERY_STRING'};
   }
   if ($buf eq "") {
      return 0 ;
   } else {
      @fval=split(/&/,$buf);
      foreach $i (0 .. $#fval) {
         ($nome,$valor)=split(/=/,$fval[$i],2);
         $valor =~ tr/+/ /;
         $valor =~ s/%(..)/pack("c",hex($1))/ge;
         $valor =~ s/<!--#[^>]+>//g;
         $valor =~ s/!.+>//g;
         $valor =~ s/<\w.+?>|<\/\w.+?>//g;
         $valor =~ s/<\w?>|<\/\w?>//g;
         $valor =~ s/\s-\w.+//g;
         $valor =~ s/system\(.+//g;
         $valor =~ s/grep//g;
         $valor =~ s/\srm\s//g;
         $valor =~ s/\srf\s//g;
         $valor =~ s/\.\.([\/\:]|$)//g;
         $valor =~ s/< *((SCRIPT)|(APPLET)|(EMBED))[^>]+>//ig;

         $nome =~ tr/+/ /;
         $nome =~ s/%(..)/pack("c",hex($1))/ge;
         $nome =~ s/<!--#[^>]+>//g;
         $nome =~ s/!.+>//g;
         $nome =~ s/<\w.+?>|<\/\w.+?>//g;
         $nome =~ s/<\w?>|<\/\w?>//g;
         $nome =~ s/\s-\w.+//g;
         $nome =~ s/system\(.+//g;
         $nome =~ s/grep//g;
         $nome =~ s/\srm\s//g;
         $nome =~ s/\srf\s//g;
         $nome =~ s/\.\.([\/\:]|$)//g;
         $nome =~ s/< *((SCRIPT)|(APPLET)|(EMBED))[^>]+>//ig;

         if (!defined($campo{$nome})) {
            $campo{$nome}=$valor;
         } else {
            $campo{$nome} .= ",$valor";
         }
      }
  }
  return 1;
}

sub fazMaster {
   $alert = shift(@_);
   print <<_FORM_MASTER_;
      Content-type: text/html

      <html><head><title>Contato com os bastidores</title><head>
      <body bgcolor="#000000" background="$imgFundo" text="#FFFFFF">
      <center>
      <table width="75%" border="3" cellspacing="0" cellpadding="5">
      <tr bgcolor="#FFFFFF">
      <td align="center"><img src=$imgLogo></td>
      <td align="center"><font color="#004080">
      A <b>Aldeia NumaBoa</b> agradece sua visita.
      Suas críticas e sugestões serão respondidas com a maior brevidade
         possível.
      </font></td></tr></table>
      <table width="75%" border="0" cellspacing="0" cellpadding="0">
      <tr align="center"><td colspan="2"><font size="2">
      <br>É com a participação de todos que poderemos manter um site
         cada vez melhor!
      </font></td></tr>
      <tr><td colspan="2"><hr></td></tr>
      <tr><td colspan="2" align="center">Por favor, preencha os campos do
         formulário abaixo. Não se esqueça de indicar seu nome e e-mail
         para que possamos fazer contato.
      </td></tr>
      <tr><td colspan="2"><hr></td></tr></table>
      $alert
      <form method="post">
      <input type="hidden" name="mandaMaster" value="$topico">
      <table width="100%" border="0" cellspacing="0" cellpadding="0">
      <tr><td align="center"><font size="2">Nome</font>
      <input type="text" name="nome" value="$FORM{'nome'}"></td>
      <td align="center"><font size="2">e-mail</font>
      <input type="text" name="email" value="$FORM{'email'}"></td></tr>
      <tr align="center"><td colspan="2">
      <font size="2">Comentário para $topico<br></font>
      <textarea wrap="physical" cols="50" rows="10" name="comentario">
         </textarea></td></tr>
      <tr align="center">
      <td colspan="2"><input type="submit" value="... Enviar ...">
      <input type="reset" value="Cancelar"></td>
      </tr></table></form>
      <br><button onClick="history.back()">Voltar</button>
      </center></font></body></html>
   _FORM_MASTER_
   exit;
}

sub mandaMaster {
   if ($FORM{'email'}) {
      if (!&checaEmail($FORM{'email'})) { &fazMaster($alert); }
   }

   if (!&checaComent) { &fazMaster($alert); }

   if ($FORM{'nome'}) { $origem = "\"$FORM{'nome'}\" <$FORM{'email'}>"; }
   else { $origem = $FORM{'email'}; }

   open (MAIL,"|$programaMail");
   print MAIL "To: $masterEmail\n";
   print MAIL "From: $origem\n";
   print MAIL "Subject: CONTATO Aldeia\n\n";
   print MAIL "$FORM{'mandaMaster'}\n";
   print MAIL "$FORM{'nome'} enviou o seguinte comentário:\n\n";
   print MAIL "$FORM{'comentario'}\n";
   close(MAIL);

   if ($FORM{'email'}) {
      open (MAIL,"|$programaMail");
      print MAIL "To: $origem\n";
      print MAIL "From: $masterEmail\n";
      print MAIL "Subject: Webmaster Aldeia\n\n";
      print MAIL "ESTA É UMA RESPOSTA AUTOMÁTICA\n\n";
      print MAIL "------------------------------\n\n";
      print MAIL "A webmaster da Aldeia recebeu de $FORM{'nome'}\n";
      print MAIL "o seguinte comentário:\n\n";
      print MAIL "$FORM{'comentario'}\n\n";
      print MAIL "------------------------------\n\n";
      print MAIL "Se você enviou o texto acima para a\n";
      print MAIL "Aldeia, a vovó Vicki agradece !\n\n";
      print MAIL "Caso você desconheça o texto, alguém usou indevidamente\n";
      print MAIL "seu nome e/ou seu e-mail para fazer contato comigo \n";
      print MAIL "através do site Aldeia NumaBoa em $baseurl\n\n";
      print MAIL "Atenciosamente\n";
      print MAIL "webmaster da Aldeia\n\n"; 
      close(MAIL);
   }

   print "Content-type: text/html\n\n";
   print "<html><head><title>Obrigada!</title></head>\n";
   print "<body bgcolor=\"#000000\" background=\"riscoAzul.jpg\"
      text=\"#FFFFFF\">\n";
   print "<font face=\"Comic Sans MS, Arial, Courier New\"><center><h1>\n";
   print "Agradeço sua visita e a colaboração.</h1>\n";
   print "<br>Seus comentários já foram enviados para a Aldeia.\n";
   print "<br><br>Se você forneceu seu e-mail, receberá uma resposta\n";
   print " com a maior brevidade possível,\n";
   print "<br>além da cópia do seu comentário.\n";
   print "</font></body></html>\n";
   exit;
}

sub checaEmail {
   $temp1 = shift(@_);
   $temp1 =~ s/_/a/g;
   $temp1 =~ s/-/a/g;
   unless ($temp1 =~ /\w+@\w+.\w+/) {
     $alert = "<p><center><table border=\"2\" bgcolor=\"#ff0000\"><tr><td><tt>\n";
     $alert .= "<font face=\"Comic Sans MS, Arial, Courier New\"><center>\n";
     $alert .= "Desculpe, mas o endereço de e-mail não está correto.\n";
     $alert .= "Por favor, tente novamente.</td></tr></table><br>\n";
     return 0; }
   return 1; # retorna true
}

sub checaComent {
   if ($FORM{'comentario'}) { return 1; }
   $alert = "<p><center><table border=\"2\" bgcolor=\"#ff0000\"><tr><td><tt>\n";
   $alert .= "<font face=\"Comic Sans MS, Arial, Courier New\"><center>\n";
   $alert .= " *** Você esqueceu de acrescentar seu comentário *** \n";
   $alert .= "</td></tr></table>\n";
   return 0; # retorna false
}

Autoria e Responsabilidades

O tutorial Perl CGI é de minha autoria e é absolutamente ©copyleft. Isto significa que você pode copiá-lo, alterá-lo, utilizá-lo e distribuí-lo, contanto que não o comercialize. Um copyleft precisa continuar um copyleft, senão a vovó Vicki fica fera :)))))

Este script não é perfeito quanto à segurança de rede, mas isto não quer dizer que está abrindo brechas de segurança enormes no sistema em que estiver sendo usado: o básico foi atendido. Além disso, eximo-me de qualquer responsabilidade quanto ao uso indevido do script e, como de praxe, não poderei ser responsabilizada por qualquer efeito adverso proveniente da sua aplicação. A única coisa que posso assegurar é que o script foi testado exaustivamente e que foi usado durante muito tempo no site da Aldeia.

Espero que o tutorial tenha sido útil e um grande abraço da vovó Vicki a todos que se interessam e prestigiam o conhecimento e as informações não proprietárias.



Todos os scripts CGI deste site são "made in Aldeia". As linguagens utilizadas são principalmente PHP e alguma coisa em Perl. Faça contato: tire dúvidas, solicite matérias, critique e contribua.





@ Tutorial Perl CGI | Dicas | Um script | Primeiras linhas | Segurança | Formulário | Enviar e-mail | Checar | Script completo |

| AAAA | Página Inicial | Mapa do Site | Novidades | Busca | Indique esta página | Mestre da Teia | Voltar |
| Localizador || @ Info NumaBoa > Tutoriais > Perl + CGI - O script completo
Créditos: vovó Vicki

webdesign sobMedida by vickiSoft - /informatica/tutor/cgiPerl/cgiScript8.php (22.07.03) versão 1.1 de 22.07.03
Licença Creative Commons 1998-2006 Aldeia NumaBoa
Exceto onde especificamente declarado, todo material deste site é disponibilizado de acordo com a Licença Creative Commons.