- Como Criar Um Site, Blog – WebMaster.pt - http://www.webmaster.pt -

PHP Mail – Formulário De Contacto

Tweet [3]

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 de Contato

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.

Tweet [3]
Be Sociable, Share!
  • [9]
  • [10]
  • [11]
  • [12]
  • [13]