Formulário de contato em PHP com Captcha

A A A
110%Redefinir
Neste tutorial vamos criar um formulário de contato em PHP utilizando o recurso de ReCaptcha para o envio de e-mail. Para criar este formulário siga os passos abaixo:


CADASTRANDO O CAPTCHA NO 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 de contato, vale conferir se a sua hospedagem está com a função allow_url_fopen ativada no PHP. Para isto basta seguir os passos abaixo:

Windows - Plesk: Função ativada por padrão.
Linux - cPanel:

Acessando o cPanel do domínio, clique no ícone "Selecionar Versão do PHP", selecione uma versão do PHP diferente do padrão do servidor e depois clique no link superior direito escrito "Switch To PHP Options" para alterar ou habilitar a função desejada.


CRIANDO O FORMULÁRIO DE CONTATO EM HTML

Após realizar toda a configuração do ReCaptcha, é necessário criar um formulário simples de contato em HTML.

Código em HTML do arquivo: 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;
}


VALIDANDO O FORMULÁRIO DE CONTATO E ENVIANDO E-MAILS


Agora que o formulário está montado e configurado com o ReCaptcha será necessário executar todas as validações e configurar o envio de e-mails. Para isto, utilizaremos a classe PHPMailer. Ela será responsável por fazer todo o procedimento de envio do e-mail, seguidamente da validação do ReCaptcha.

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 os envios de e-mails via SMTP

Estes arquivos deverão estar na mesma pasta do seu arquivo envia.php que será criado logo abaixo. Neste arquivo será necessário efetuar as configurações com os dados do seu servidor de SMTP e do SECRET-KEY do ReCaptcha.

Código em PHP do arquivo: 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 = '|*MAIL.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 do e-mail.

Pronto! O formulário de contato está configurado.

Este artigo foi útil?


   

Deixe um Comentário