Faça uma pesquisa...
Generic filters
Exact matches only
Search in title
Search in content
Search in excerpt

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 utilize os arquivos deixados e siga os passos descritos.

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.

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.

Esse artigo te ajudou?

Não encontrou o que procurava? Faça uma nova busca!

Faça uma pesquisa...
Generic filters
Exact matches only
Search in title
Search in content
Search in excerpt