Formulário de contato em PHP com Captcha

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:

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.

Ativando URL_fopen

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:

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.

  • Este artigo foi útil para você?
  • Sim   Não

Tags relacionadas

formulário PHP

php

ReCaptcha