#!/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
}
|
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.
|