Vocabulário: arquivo = ficheiro
A primeira linguagem de programação que aprendemos para desenvolver um website é o HTML, e aliado ao CSS conseguimos desenvolver um website básico inteiro. Mas quando chega no menu contato, nenhum cliente mais aceita que se coloque lá um link que abrirá o Outlook ou Thunderbird do usuário. É preciso um formulário de contato.
E nesse momento é necessário que você saiba uma função do php. A mail(). É ela a estrela deste tutorial.
Criaremos um formulário e o código PHP para validar e enviar as informações preenchidas para o e-mail do cliente.
Formulário HTML
Vamos iniciar com o código HMTL básico para criação do formulário:
<div class="div-form">
<h1>Formulário de Contato</h1>
<form action="envia-email.php" method="post">
<fieldset>
<p><label for="nome">Nome:</label></p>
<input type="text" name="nome" size="30" class="width233" />
<p><label for="email">E-mail:</label></p>
<input type="text" name="email" size="30" class="width233"/>
<p><label for="texto">Texto:</label></p>
<textarea name="texto" rows="10" class="width233"></textarea><br />
<input type="submit" name="enviar" value="Enviar" />
</fieldset>
</form>
</div>
A propriedade action do tag form informa para onde devem ser enviadas as informações quando o formulário for submetido. Apontamos para o arquivo que conterá o código PHP.
Caso deseja fazer tudo em um único arquivo o código ficaria:
<form action="<?php $_SERVER['PHP_SELF']?>" method="post">
E feita uma verificação para executar o código somente quando o formulário for submetido:
if (isset($_POST['enviar'])
{
//código php do arquivo
}
POST ou GET?
Voltando ao nosso código HTML, na propriedade method da tag form inserimos o valor POST. Ele permite que enviemos a quantidade que quisermos de informação e é um caminho somente de ida, onde as informações não poderão ser recuperadas, é indicado também para dados sensíveis como senhas. Perfeito para ser utilizado com formulários.
Nesse momento surge a dúvida de quando e por que não utilizar o GET, que também tem o papel de enviar informações. No nosso caso ele não é útil, pois além de mostrar as informações submetidas na url da página, limita o número de caracteres que podem ser enviados. Ele é mais útil quando precisamos passar dados de uma página para outro.
Identificar Os Dados
Para identificar os dados enviados, definimos a propriedade name para cada campo. Isso cria uma espécie de variável/valor. Ao submeter o form, a organização esclarecida será:
Nome = “informação digitada no campo nome”
E-mail = “informação digitada no campo e-mail”
Validação Dos Dados
Vamos partir agora para o arquivo “envia-email.php”.
Iniciamos o arquivo com as tags PHP e validamos os dados:
<?php
$nome = htmlspecialchars(strip_tags($_POST['nome']));
$texto = htmlspecialchars(strip_tags($_POST['texto']));
$email = htmlspecialchars(strip_tags($_POST['email']));
$refresh = '<meta http-equiv="refresh" content="1; url=form.html" />';
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
{
echo '<script type="text/javascript">alert("E-mail inválido!.")</script>';
exit ($refresh);
} elseif
(!filter_var($email, FILTER_SANITIZE_EMAIL))
{
echo '<script type="text/javascript">alert("E-mail inválido!. Contém caracteres não permitidos.")</script>';
exit ($refresh);
}
?>
Definimos as variáveis. E antes que recebam valores validamos utilizando as funções htmlspecialchars [4] e strip_tags [5]. Note que aparece $_POST pois foi isso que definimos no method do formulário, e o nome da variável igual ao que definimos na propriedade name.
Fizemos uma verificação a mais no campo de e-mail com a função filter_var [6] para evitar injections e garantir que o e-mail é válido. Só não confirma que ele existe e esta disponível apartir da versão 5.2 do PHP.
Caso a verificação retorne um valor false, é mostrado ao usuário um alert informando que o e-mail fornecido é inválido e quando ele pressionar Ok é redirecionado para a página do contato utilizando uma meta tag.
Mas por que não utilizamos a função header? Porque ela não permite saídas html antes de sua execução. E como precisamos mostrar um alert para informar ao usuário que erro ocorreu, contornamos o problema utilizando a meta tag refresh, inserida dentro do comando exit, que pára a execução do script naquele ponto, evitando verificações e alertas desnecessários.
Estando tudo certo com os dados, faremos uma última verificação antes de iniciar o processo de envio. Garantimos que todos os campos obrigatórios foram preeenchidos.
if ($nome != '' && $email != '' && $texto != '')
{
//codigo
} else{
echo '<script type="text/javascript">alert("Por favor preencha todos os campos.")</script>';
exit ($refresh); }
Antes de iniciarmos a organização das informações para o envio do e-mail, vamos conhecer a sintaxe da função mail(). Pois desta maneira fica mais claro o porquê de ter que preencher determinadas variáveis.
Função PHP mail()
Bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]] )
A palavra Bool na frente vem de Boolean, significa que o retorno da função será ou true, em caso de sucesso ou false.
Em seguida temos os campos a serem preenchidos. Para qual e-mail será enviado (string to), o título (string subject), a mensagem (string message) e parâmetros adicionais como cabeçalhos (headers).
Para tornar mais objetivo o tutorial, vamos simplificar a linha acima.
mail($recipient, $subject, $msg, $header)
Formando O E-Mail
São as variáveis acima que vamos preencher agora.
$msg = "<strong>Nome:</strong> $nome<br>";
$msg .= "<strong>E-mail:</strong> $email<br>";
$msg .= "<strong>Mensagem:</strong> $texto<br>";
$recipient = "seuemail@servidor.com.br";
$subject = "Contato Website";
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-Type: text/html; charset=iso-8859-1\r\n";
$header .= "From: $email\r\n";
$header .= "X-Priority: 1 (Higuest)\n";
$header .= "X-MSMail-Priority: High\n";
$header .= "Importance: High\n";
Corpo Da Mensagem
A variável $msg contém as informações que serão mostradas no corpo do e-mail. Podem ser utilizados códigos HTML e CSS para formatar o e-mail da forma que preferir. Isso porque mais abaixo vamos informar que o formato do e-mail é HTML.
Destinatário
Em seguida criamos a variável $recipient que contém o e-mail para o qual as informações preenchidas no formulário serão enviadas. Se quiser enviar para mais pessoas faça da seguinte maneira:
$header .= “\r\n Cc: email@servidor.com”;
$header .= “\r\n Bcc: outroemail@servidor.com”;
Dessa forma são enviadas cópias para os e-mails listados.
Título
A variável $subject mostra o título do e-mail, você pode colocar ali, por exemplo, o nome de quem esta enviando a mensagem, mas não pode formatar.
Cabeçalhos
Começamos a formar o cabeçalho do e-mail.
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-Type: text/html; charset=iso-8859-1\r\n";
$header .= "From: $email\r\n";
//define a prioridade do e-mail
$header .= "X-Priority: 1 (Higuest)\n";
$header .= "X-MSMail-Priority: High\n";
$header .= "Importance: High\n";
Definimos o formato da mensagem. Indicamos que o conteúdo pode conter caracteres HTML (text/html), se fosse somente texto ficaria (text/plain), e utiliza a codificação ISO. Em seguida informamos de qual e-mail provem a mensagem (from). Caso considere necessário pode definir uma prioridade alta para a mensagem.
Enviando O E-Mail
Com todas as variáveis preenchidas podemos enviar o e-mail.
if (mail ($recipient, $subject, $msg, $header))
{
echo '<script type="text/javascript">alert("Contato enviado.")</script>';
exit ($refresh);
} else {
echo '<script type="text/javascript">alert("Problema no envio da mensagem. Por favor tente mais tarde..")</script>';
exit ($refresh); http://br2.php.net/manual/pt_BR/function.filter-var.php
}
Se o envio ocorreu, true, mostramos um alert informando o usuário e retornamos a página de contato. E o trabalho esta acabado. O código completo fica assim:
Código completo
<?php
$nome = htmlspecialchars(strip_tags($_POST['nome']));
$texto = htmlspecialchars(strip_tags($_POST['texto']));
$email = htmlspecialchars(strip_tags($_POST['email']));
$refresh = '<meta http-equiv="refresh" content="1; url=form.html" />';
if (!filter_var($email, FILTER_VALIDATE_EMAIL))
{
echo '<script type="text/javascript">alert("E-mail inválido!.")</script>';
exit ($refresh);
} elseif
(!filter_var($email, FILTER_SANITIZE_EMAIL))
{
echo '<script type="text/javascript">alert("E-mail inválido!. Contém caracteres não permitidos.")</script>';
exit ($refresh);
}
if ($nome != '' && $email != '' && $texto != '')
{
$msg = "<strong>Nome:</strong> $nome<br>";
$msg .= "<strong>E-mail:</strong> $email<br>";
$msg .= "<strong>Mensagem:</strong> $texto<br>"; $recipient = "seuemail @servidor.com.br";
$subject = "Contato Website";
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-Type: text/html; charset=iso-8859-1\r\n";
$header .= "From: $email\r\n";
if (mail ($recipient, $subject, $msg, $header))
{
echo '<script type="text/javascript">alert("Contato enviado.")</script>';
exit ($refresh);
} else {
echo '<script type="text/javascript">alert("Problema no envio da mensagem. Por favor tente mais tarde..")</script>';
exit ($refresh);
}
} else{
echo '<script type="text/javascript">alert("Por favor preencha todos os campos.")</script>';
exit ($refresh);
}
?>
Formulário De Contacto Avançado
Se você pretende ir um pouco além, e autenticar os e-mail enviados ou anexar arquivos esta função já não pode ajudá-lo muito. Primeiro porque ela não dá suporte para autenticação via SMTP e depois porque é mais complicado anexar arquivos com ela. Para facilitar seu trabalho com isso, você pode utilizar a função PHPMailer [7].
DOWNLOAD: Descarregue o código utilizado neste tutorial para a criação dum Formulário de Contacto Em PHP [8], em formato .zip.