A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Tutoriais e Programação

Perl+CGI - Um script de verdade

Ter

18

Nov

2008


19:46

(4 votos, média 4.00 de 5) 


A subrotina mandaMaster

Como a segunda chamada ao script é do tipo POST, a expressão condicional if ($ENV{'REQUEST_METHOD'} eq 'POST') retorna verdadeiro e força a execução da linha seguinte que contém a chamada à subrotina mandaMaster(). Esta subrotina nada mais é do que uma rotina para enviar os dados do formulário via e-mail.

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 "Obrigada! \n"; print "\n"; print "

\n"; print "Agradeço sua visita e a colaboração.

\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 "
\n"; exit; }

Esta subrotina começa checando a validade de dois valores enviados através do formulário: o e-mail do usuário e o comentário. As subrotinas chamadas para fazer a checagem serão analisadas adiante para não perdermos o foco da presente análise.

Logo depois, atribuímos um valor à variável $origem. Digamos que o usuário tenha preenchido o campo nome com "Zé" e o campo email com "ze@das.couves". Neste caso a variável $origem recebe o valor "Zé ". Se o usuário não forneceu seu nome, $origem será igual ao email fornecido, $origem=ze@das.couves.

A seguir é acionado o programa de e-mail do servidor para enviar um e-mail com os dados do formulário. Com open (MAIL,"|$programaMail") acionamos o mailer e abrimos uma sessão de conexão de nome MAIL, a qual fica aguardando os dados que devem ser enviados. A variável $programaMail é a que foi definida no início do script com o valor "/usr/lib/sendmail -t". Os comandos print enviam os dados para o mailer: inicialmente os obrigatórios, como "To", "From" e "Subject". Observe que o "To" usa a variável $masterMail definida no início do script e que "From" se utiliza da variável $origem que acabamos de estabelecer.

Logo a seguir, usando as variáveis do próprio formulário, enviamos os valores dos campos mandaMaster, nome e comentário. Observe que a variável $FORM{'mandaMaster'} corresponde a um campo "escondido" (hidden) que criamos no formulário e que contém o valor da variável $topico enviada através do método GET na primeira chamada ao script. Se você estiver meio perdido com a explicação, volte uma página para rever a subrotina fazMaster.

Se tudo correu bem, os "print" enviaram o e-mail e podemos fechar a conexão MAIL e o programa mailer. Para isto usamos close(MAIL). Só para esclarecer: o nome da conexão pode ser qualquer um, não precisa ser necessariamente MAIL.

Agora é a vez de dar um retorno para o usuário (uma questão de educação :wink:) Se o usuário forneceu um endereço de e-mail, o processo é o mesmo: abrimos uma nova conexão MAIL, "printamos" os elementos obrigatórios "To" e "From", enviamos um texto padrão e fechamos novamente a conexão.

Missão cumprida! Só que o usuário não tem como saber se tudo correu bem. Para avisá-lo e agradecer o contato, geramos uma nova página HTML. Neste exemplo, ao invés de delimitar uma área, usei "print" novamente. Observe que as quebras de linha, neste caso, são obtidas através do caracter de escape \n. A famosa linha em branco após Content-type: text/html é obtida com \n\n. O primeiro \n faz a quebra de linha para o texto Content-type: text/html e o segundo \n faz uma quebra de linha para uma linha vazia!

Formulário de agradecimento gerado, é hora de sair do script com exit e devolver o controle ao navegador. É isso aí, só falta dar uma espiada nas subrotinas de controle de dados checaEmail() e checaComent().

Informações adicionais