Tutor NumaBoaENVIANDO E-MAILS
Tutorial Perl CGI - 6
Silício NumaBoa



Se nosso script funcionar perfeitamente até este ponto, o usuário que acionar o script receberá uma página contendo um formulário cujos campos devem ser preenchidos. Ao clicar no botão [enviar], os dados do formulário serão enviados como parâmetros através do método POST e o mesmo script será acionado uma segunda vez.

Desta vez, o script seguirá o caminho indicado no fluxograma B.



7.4 Identificando a chamada

Já sabemos que o método de chamada utilizado fica armazenado na variável de contexto $ENV sob a denominação REQUEST_METHOD. Portanto, basta avaliar o conteúdo de $ENV{'REQUEST_METHOD'} para se determinar o tipo de chamada. Como a segunda chamada ao script mailMan.cgi partiu de um formulário fazendo um POST, a linha (48) retorna verdadeiro (true) e a linha de execução é direcionada para a subrotina &mandaMaster.

36 # #############################
37 # Script
38 # #############################
39
40 &pegaInput;
41 $topico = $campo{'topico'};
42 $topico =~ s/%20/ /g;
43
44 if ($ENV{'REQUEST_METHOD'} eq 'GET') {
45    fazMaster();
46 }
47
48 if ($ENV{'REQUEST_METHOD'} eq 'POST') {
49   &mandaMaster;
50 }
51

7.B Direcionando o script para enviar o e-mail

Como a segunda chamada ao script é do tipo POST, a expressão condicional da linha (48), 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.

150 sub mandaMaster {
151
152  if ($FORM{'email'}) {
153    if (!&checaEmail($FORM{'email'})) { &fazMaster($alert); }
154  }
155
156  if (!&checaComent) { &fazMaster($alert); }
157
158  if ($FORM{'nome'}) { $origem = "\"$FORM{'nome'}\" <$FORM{'email'}>"; }
159  else { $origem = $FORM{'email'}; }
160
161  open (MAIL,"|$programaMail");
162  print MAIL "To: $masterEmail\n";
163  print MAIL "From: $origem\n";
164  print MAIL "Subject: CONTATO Aldeia\n\n";
165  print MAIL "$FORM{'mandaMaster'}\n";
166  print MAIL "$FORM{'nome'} enviou o seguinte comentário:\n\n";
167  print MAIL "$FORM{'comentario'}\n";
168  close(MAIL);
169
170  if ($FORM{'email'}) {
171    open (MAIL,"|$programaMail");
172    print MAIL "To: $origem\n";
173    print MAIL "From: $masterEmail\n";
174    print MAIL "Subject: Webmaster Aldeia\n\n";
175    print MAIL "ESTA É UMA RESPOSTA AUTOMÁTICA\n\n";
176    print MAIL "------------------------------\n\n";
177    print MAIL "A webmaster da Aldeia recebeu de $FORM{'nome'}\n";
178    print MAIL "o seguinte comentário:\n\n";
179    print MAIL "$FORM{'comentario'}\n\n";
180    print MAIL "------------------------------\n\n";
181    print MAIL "Se você enviou o texto acima para a\n";
182    print MAIL "Aldeia, a vovó Vicki agradece !\n\n";
183    print MAIL "Caso você desconheça o texto, alguém usou indevidamente\n";
184    print MAIL "seu nome e/ou seu e-mail para fazer contato comigo \n";
185    print MAIL "através do site Aldeia NumaBoa em $baseurl\n\n";
186    print MAIL "Atenciosamente\n";
187    print MAIL "webmaster da Aldeia\n\n"; 
188    close(MAIL);
189  }
190
191  print "Content-type: text/html\n\n";
192  print "<html><head><title>Obrigada!</title></head>\n";
193  print "<body bgcolor=\"#000000\" background=\"riscoAzul.jpg\" text=\"#FFFFFF\">\n";
194  print "<font face=\"Comic Sans MS, Arial, Courier New\"><center><h1>\n";
195  print "Agradeço sua visita e a colaboração.</h1>\n";
196  print "<br>Seus comentários já foram enviados para a Aldeia.\n";
197  print "<br><br>Se você forneceu seu e-mail, receberá uma resposta\n";
198  print " com a maior brevidade possível,\n";
199  print "<br>além da cópia do seu comentário.\n";
200  print "</font></body></html>\n";
201  exit;
202 }
203

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

Nas linhas (158 e 159) 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é <ze@das.couves>". 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 (161) 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 comando print enviam os dados para o mailer: inicialmente os obrigatórios, como "To" (162), "From" (163) e "Subject" (164). 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 (linhas 165 a 167). 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, reveja "Criando um formulário".

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) (168). 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 ;)) Se o usuário forneceu um endereço de e-mail (170), 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 (linhas 170 a 189).

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 (linhas 191 a 200). 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 (201) e devolver o controle ao navegador. É isso aí, só falta dar uma espiada nas subrotinas de controle de dados checaEmail() e checaComent().



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 - Enviando e-mails
Créditos: vovó Vicki

webdesign sobMedida by vickiSoft - /informatica/tutor/cgiPerl/cgiScript6.php (20.10.00) 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.