O formulário de contato é uma ferramenta de comunicação de extrema importância que não pode ser tratada com desdem ao se desenvolver um site. Ela é uma das tarefas primordiais da web e devido a crescente onda de spam simplesmente deixar seu endereço de e-mail na página pode ser uma grande dor de cabeça(acreditem minha pasta spam do Gmail sabe do que fala).

Veremos então como criar um pequeno formulário de contato com apenas nome, e-mail, telefone, cidade, assunto e mensagem. Vejamos como ficará o HTML então:

<form action="enviar.php" method="post">
<fieldset>
        <legend>Formulário de Contato</legend>
         <label for="nome">Nome</label>
         <input name="nome" size="40" type="text" />
         <label for="email">E-mail:</label>
         <input name="email" size="40" type="text" />
         <label for="telefone">Telefone</label>
         <input name="telefone" size="20" type="text" />
         <label for="assunto">Assunto</label>
         <input name="assunto" size="40" type="text" />
         <label for="mensagem">Mensagem</label>
         <textarea cols="40" rows="4" name="mensagem"></textarea>
         <input type="submit" value="Enviar" />
</fieldset>
</form>

Para enviar este formulário iremos utilizar uma classe PHP chamada PHPmailer(http://phpmailer.sourceforge.net/), então antes de começarmos é bom baixa-la e descompacta-la na pasta do script.

require_once('phpmailer/class.phpmailer.php');
 
 $erros = "";
 
 if(empty($_POST['nome'])){
     $erros .= "O nome deve ser preenchido.";
 }
 
 if(empty($_POST['email']) ){
      $erros .= "O E-mail deve ser preenchido.";
 }else{
      $email = $_POST['email'];
      eregi("([\._0-9A-Za-z-]+)@([0-9A-Za-z-]+)(\.[0-9A-Za-z\.]+)",$email,$match);
    if(!isset($match)){
       $erros .= "O e-mail informado é inválido.";
    }
}
 
if(empty($_POST['mensagem'])){
    $erros .= "A mensagem deve ser preenchida.";
}
 
if( empty($erros) ){
 
    $phpmail = new PHPMailer();
 
    $phpmail->IsSMTP(); // envia por SMTP
    $phpmail->Host = "mail.xxxxxx.com"; // SMTP servers
    $phpmail->SMTPAuth = true; // Caso o servidor SMTP precise de autenticação
    $phpmail->Username = "xxxxxx@xxxxxx.com"; // SMTP username
    $phpmail->Password = "*********"; // SMTP password
 
    $phpmail->IsHTML(true);
 
    $phpmail->From = $_POST['email'];
    $phpmail->FromName = $_POST['nome'];
 
    $phpmail->AddAddress("blogbotecodigital@gmail.com");
    $phpmail->Subject = $assunto;
    $phpmail->Body .= "Nome: ".$_POST['nome']."";
    $phpmail->Body .= "E-mail: ".$_POST['email']."";
    $phpmail->Body .= "Telefone: ".$_POST['telefone']."";
    $phpmail->Body .= "Assunto: ".$_POST['assunto']."";
    $phpmail->Body .= "Mensagem: ".nl2br($_POST['mensagem'])."";
 
    $send = $phpmail->Send();
 
    if($send){
        echo "A Mensagem foi enviada com sucesso.";
    }else{
        echo "Não foi possível enviar a mensagem. Erro: " .$phpmail->ErrorInfo;
    }
 
}else{
    echo $erros;
}

Vamos então começar a examinar o código. Na linha 1 apenas incluímos a classe PHPmailer no script. Na linha 5 testamos se a variável nome enviada por POST pelo nosso formulário esta vazia, se sim acrescentamos uma mensagem na variável $erros(linha 6).

Na linha 9 verificamos se o e-mail foi informado, se sim, na linha 13 utilizamos uma expressão regular para verificar se realmente foi informado um e-mail. Na linha 19 verificamos se foi enviado alguma mensagem.

Na linha 23 verificamos se não existe nenhuma mensagem de erro na variável $erros, se ela estiver vazia começa a brincadeira.

Instanciamos a classe PHPmailer na linha 25 para poder utiliza-la.

Na linha 27 definimos que utilizaremos o protocolo SMTP, poderíamos ter definido a opção $phpmail->IsMail(); que utilizaria ao invés do SMTP a função mail do PHP, mas utilizar a função mail() não é tão recomendada pois muitos servidores de e-mail pegam como spam.

Como estamos utilizando o SMTP devemos fornecer o host que enviará o email (linha 28). Na linha 29 definimos que utilizaremos autenticação para enviar o e-mail, o que também é interessante pois muitos servidores já estão utilizando este recurso para tentar diminuir o envio de spam na rede. Como definimos que iremos utilizar autenticação devemos informar o usuário e a senha, o que é feito nas linha 30 e 31.

Na linha 33 definimos que o e-mail será enviado em formato HTML.

Nas linhas 35 e 36 definimos o e-mail e nome enviado pelo formulário como remetente da mensagem, costumo fazer isto para facilitar a resposta da mensagem.

Na linha 38 adicionamos o endereço do destinatário no caso nós mesmo. A classe PHPmailer também nos permite enviar uma cópia do e-mail para outro endereço $phpmail->AddCC($endereco,$nome) e cópia oculta $phpmail->AddBCC($endereco, $nome).

Entre as linhas 39 e 44 montamos a mensagem, sendo setado o assunto $phpmail->Subject = $assunto; e montado o formulário no corpo da mensagem. Lembrando de converter as quebras de linhas \n do campo mensagem para as quebra de linha em HTML( nl2br() ).

Na linha 46 é onde nosso e-mail é enviado(ou não?). Após esta linha apenas informamos ao usuário se a mensagem foi enviada ou não. Se não for(linha 51) mostramos o erro que ocorreu.

Este é apenas um pequeno exemplo do que se pode fazer com a classe PHPMailer, ela é muito mais poderosa que isto, podemos por exemplo, enviar anexos nas mensagens.