Neste tutorial vamos criar um formulário de contato em PHP utilizando o recurso de Captcha para envio de e-mail. Para criar este formulário siga os passos abaixo:
Tópicos
Cadastrando no Captcha do Google
Antes de iniciar qualquer configuração, vamos precisar realizar alguns passos no sistema de ReCaptcha do Google.
Caso tenha dúvidas você pode seguir o tutorial de Como criar um ReCaptcha do Google.
Configurando a função allow_url_fopen
Antes de passar para a etapa do formulário em si, vale conferir se seu site está com a função php allow_url_fopen está ativada. Para isto basta seguir os passos abaixo:
1. Acesse o Painel de Controle.
2. Dentro do Painel de Controle, clique no ícone Configurações do php que está na categoria de Ferramentas complementares.
3. Na opção allow_url_fopen defina o campo como on e então clique em salvar.
Criando o formulário HTML
Após fazer toda a configuração do ReCaptcha agora é criar um formulário simples de contato em HTML. Abaixo segue um exemplo para utilização
Código HTML – formulario-contato.php
<?php
include 'envia.php';
?>
<html>
<head>
<meta charset="utf8">
<title>Formulário de contato</title>
<!-- Aqui adiciona o script do ReCaptcha -->
<script src='https://www.google.com/recaptcha/api.js'></script>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<h1>Este é um teste de formulário de contato</h1>
<form method="POST" action="formulario-contato.php">
<label>Digite seu nome:
<input type="text" name="nome" value="" placeholder="ex: João" required>
</label>
<label>Digite seu e-mail:
<input type="email" name="email" value="" placeholder="ex: joaoclb@gmail.com" required>
</label>
<label>Digite o assunto:
<input type="text" name="assunto" value="" placeholder="ex: orçamento" required>
</label>
<label>Digite sua mensagem:
<input type="text" name="msg" value="" placeholder="Digite sua mensagem aqui" required>
</label>
<!-- Div do ReCaptcha foi adicionado no final do formulário -->
<div class="g-recaptcha" data-sitekey="|*SEU-SITE-KEY*|"></div>
<input class="send" type="submit">
</form>
</div>
</body>
</html>
Código CSS- style.css
body{
margin: 20px 0;
font-family: Arial,sans-serif;
font-size: 12px;
}
label{
display:block;
margin-top:15px;
}
input{
display:block;
height:40px;
border:1px solid #e5e5e5;
background:#f0f0f0;
padding:10px;
margin-top: 5px;
width: 100%;
}
.container{
width: 960px;
margin:0 auto;
}
.g-recaptcha{
margin-top:15px;
}
.send{
background: #46ac00;
color: #fff;
border: 0px;
}
Neste exemplo você vai reparar 2 coisas. Primeiro eu dei um include de um arquivo envia.php, mais pra frente ele será explicado. Segundo já adicionei o script da api e o div dp ReCaptcha ensinado no tutorial como criar um ReCaptcha do Google.
Validando o formulário e enviando e-mails
Agora que o formulário está montado e configurado com o ReCaptcha, é preciso fazer todas as validações e executar o envio realmente. Para isto, utilizarei a classe PHPMailer.
Ela será responsável por fazer todo o procedimento de envio da mensagem, depois de validado o Captcha.
Você precisará destes arquivos para que a classe PHPMailer funcione:
- PHPMailerAutoload.php – Responsável por carregar todas as dependências da classe PHPMailer
- class.phpmailer.php – A classe principal do PHPMailer
- class.smtp.php – A classe que vai permitir você fazer envios via SMTP
Todos os arquivos em seus devidos lugares é hora de criar o arquivo envia.php. O que deixo de exemplo já está funcionando, mas, será necessário fazer as configurações com seus e-mails, servidor SMTP e o SECRET-KEY do ReCaptcha.
Código PHP – envia.php
<?php
//Defino a Chave do meu site
$secret_key = '|*SEU-SECRET-KEY*|';
//Pego a validação do Captcha feita pelo usuário
$recaptcha_response = $_POST['g-recaptcha-response'];
// Verifico se foi feita a postagem do Captcha
if(isset($recaptcha_response)){
// Valido se a ação do usuário foi correta junto ao google
$answer =
json_decode(
file_get_contents(
'https://www.google.com/recaptcha/api/siteverify?secret='.$secret_key.
'&response='.$_POST['g-recaptcha-response']
)
);
// Se a ação do usuário foi correta executo o restante do meu formulário
if($answer->success) {
// Carrego a classe PHPMailer através do Autoload
include "PHPMailerAutoload.php";
// Instancio a classe PHPMailer
$msg = new PHPMailer();
// Faço todas as configurações de SMTP para o envio da mensagem
$msg->CharSet = "UTF-8";
$msg->isSMTP();
$msg->Host = '|*SMTP.SEUDOMINIO.COM.BR*|';
$msg->SMTPAuth = true;
$msg->Username = '|*SEU-EMAIL@SEUDOMINIO.COM.BR*|';
$msg->Password = '|*SUA-SENHA*|';
$msg->Port = 587;
$msg->SMTPAutoTLS = false;
$msg->AuthType = 'PLAIN';
//Defino o remetente da mensagem
$msg->setFrom('|*SEU-EMAIL@SEUDOMINIO.COM.BR*|','|*NOME-DO-SEUEMAIL*|');
// Defino a quem esta mensagem será respondida, no caso, para o e-mail
// que foi cadastrado no formulário
$msg->addReplyTo($_POST['email'], $_POST['nome']);
// Defino a mensagem como mensagem de texto (Ou seja não terá formatação HTML)
$msg->IsHTML(false);
// Adiciono o destinatário desta mensagem, no caso,
//minha conta de contatos comerciais.
$msg->AddAddress('|*SEU-EMAIL@SEUDOMINIO.COM.BR*|', '|*NOME-DO-SEUEMAIL*|');
// Defino o assunto que foi digitado no formulário
$msg->Subject = $_POST['assunto'];
// Defino a mensagem que foi digitada no formulário
$msg->Body = $_POST['msg'];
// Defino a mensagem alternativa que foi digitada no formulário.
// Esta mensagem é utilizada para validações AntiSPAM e por isto
// é muito recomendado que utilize-a
$msg->AltBody = $_POST['msg'];
// Faço o envio da mensagem
$enviado = $msg->Send();
// Limpo todos os registros de destinatários e arquivos
$msg->ClearAllRecipients();
// Caso a mensagem seja enviada com sucesso ela retornará sucesso
// senão, ela retornará o erro ocorrido
if ($enviado){
echo "E-mail enviado com sucesso!";
}
else {
echo "Não foi possível enviar o e-mail.";
echo "<b>Informações do erro:</b> " . $msg->ErrorInfo;
}
}
// Caso o Captcha não tenha sido validado
//retorno uma mensagem de erro.
else {
echo "Por favor faça a verificação do captcha abaixo";
}
}
A primeira coisa que este arquivo fará é validar o Captcha, em seguida ele iniciará a montagem da mensagem e por fim o envio.
Pronto agora é só configurar com seus dados de envio de e-mails e do ReCaptcha e esperar pelo contato de seus clientes/usuários.