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().
|