Como criar um formulário usando o PHPMAILER

Introdução

No artigo de hoje mostraremos como é fácil fazer (ou utilizar) um script PHP para o envio seguro de dados dos seus formulários, além de permitir autenticação ao servidor SMTP e ter uma maior chance das mensagens chegarem aos seus destinatários diretamente na caixa de entrada. É comum observarmos casos de “invasões” a formulários comuns que utilizam a função mail() sem autenticação, o que acabam comprometendo não apenas o servidor, como também culminam no bloqueio/suspensão da conta de hospedagem.

O que é o PHPMailer?

Basicamente é uma classe do PHP que possui funções mais avançadas que a classe mail() padrão. Um dos seus diferenciais é permitir o envio seguro, principalmente a servidores que tenham requerimento por autenticação. A classe faz a autenticação do usuário/senha do SMTP no servidor e garante que aquele e-mail está sendo enviado realmente pela conta autenticada. No uso da função mail() padrão, não há autenticação, por isso os servidores podem rejeitar o recebimento destas mensagens – e é o que acontece em grandes provedores.

Para conseguir enviar emails pelo seu site via autenticação SMTP será necessário fazer uso da classe. Portanto, faça o download da versão mais recente pelo link informado acima ou então faça o download da versão 5.2.23 (abril de 2017) CLICANDO AQUI -
 ou diretamente via https://github.com/PHPMailer/PHPMailer

Depois de ter baixado, insira os arquivos PHPMailerAutoload.php, class.phpmailer.php e class.smtp.php em alguma pasta do seu FTP. Neste exemplo vamos utilizar uma pasta chamada autenvio.

 


CONFIGURANDO OS DADOS DE AUTENTICAÇÃO SMTP

 

Crie um novo arquivo no mesmo nível do diretório onde colocou os arquivos da classe. O nome do arquivo fica a sua escolha, neste exemplo será utilizado o enviar.php.
O arquivo deve conter o código abaixo e você deve fazer as devidas alterações para que o mesmo funcione:

Linha 3 – require_once(“autenvio/PHPMailerAutoload.php”): Defina o caminho correto do arquivo class.phpmailer.php
Linha 9 – $mail->Host = “smtp.seudominio.com.br”: Defina corretamente o seu host de envio SMTP
Linha 14 – $mail->Username = ‘conta-de-email@seudominio.com.br’: Conta que fará o envio das mensagens (deve ser uma conta existente e ativa no seu domínio)
Linha 15 – $mail->Password = ‘senha’: Defina a senha da sua conta de email que fará o envio da mensagem
Linha 18 – $mail->Sender = “conta-de-email@seudominio.com.br”: Conta que fará o envio das mensagens (deve ser uma conta existente e ativa no seu domínio)
Linha 23 – $mail->AddAddress(‘recebe1@dominio.com.br’): Defina a conta que receberá as mensagens

 

<?php
// Adiciona o arquivo class.phpmailer.php - você deve especificar corretamente o caminho da pasta com o este arquivo.
require_once("autenvio/PHPMailerAutoload.php");
// Inicia a classe PHPMailer
$mail = new PHPMailer();

// DEFINIÇÃO DOS DADOS DE AUTENTICAÇÃO - Você deve auterar conforme o seu domínio!
$mail->IsSMTP(); // Define que a mensagem será SMTP
$mail->Host = "mail.seudominio.com.br"; // Seu endereço de host SMTP
$mail->SMTPAuth = true; // Define que será utilizada a autenticação - Mantenha o valor "true"
$mail->Port = 587; // Porta de comunicação SMTP - Mantenha o valor "587"
$mail->SMTPSecure = false; // Define se é utilizado SSL/TLS - Mantenha o valor "false"
$mail->SMTPAutoTLS = false; // Define se, por padrão, será utilizado TLS - Mantenha o valor "false"
$mail->Username = 'conta-de-email@seudominio.com.br'; // Conta de email existente e ativa em seu domínio
$mail->Password = '********'; // Senha da sua conta de email

// DADOS DO REMETENTE
$mail->Sender = "conta-de-email@seudominio.com.br"; // Conta de email existente e ativa em seu domínio
$mail->From = "conta-de-email@seudominio.com.br"; // Sua conta de email que será remetente da mensagem
$mail->FromName = "Form do site"; // Nome da conta de email

// DADOS DO DESTINATÁRIO
$mail->AddAddress('recebe1@dominio.com.br', 'Nome - Recebe1'); // Define qual conta de email receberá a mensagem
//$mail->AddAddress('recebe2@dominio.com.br'); // Define qual conta de email receberá a mensagem
//$mail->AddCC('copia@dominio.net'); // Define qual conta de email receberá uma cópia
//$mail->AddBCC('copiaoculta@dominio.info'); // Define qual conta de email receberá uma cópia oculta

// Definição de HTML/codificação
$mail->IsHTML(true); // Define que o e-mail será enviado como HTML
$mail->CharSet = 'utf-8'; // Charset da mensagem (opcional)

// DEFINIÇÃO DA MENSAGEM
$mail->Subject = "Formulário de Contato"; // Assunto da mensagem
$mail->Body .= " Nome: ".$_POST['nome']."<br>"; // Texto da mensagem
$mail->Body .= " E-mail: ".$_POST['email']."<br>"; // Texto da mensagem
$mail->Body .= " Assunto: ".$_POST['assunto']."<br>"; // Texto da mensagem
$mail->Body .= " Mensagem: ".nl2br($_POST['mensagem'])."<br>"; // Texto da mensagem

// ENVIO DO EMAIL
$enviado = $mail->Send();
// Limpa os destinatários e os anexos
$mail->ClearAllRecipients();

// Exibe uma mensagem de resultado do envio (sucesso/erro)
if ($enviado) {
echo "E-mail enviado com sucesso!";
} else {
echo "Não foi possível enviar o e-mail.";
echo "<b>Detalhes do erro:</b> " . $mail->ErrorInfo;
}

TUDO CERTO ATÉ AQUI! COMO COLOCO O FORMULÁRIO NO SITE?

Crie um novo arquivo e o insira dentro do mesmo diretório onde colocou o arquivo acima o seguinte conteúdo – ou, se preferir, faço o download aqui: Baixar aquivo form.php.

Linha 20 – method=”POST” action=”envia.php”: Você deve especificar corretamente o nome do arquivo criado no passo anterior.




<!DOCTYPE html>

<html lang="pt-br">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible"content="IE=edge">
    <meta name="viewport"content="width=device-width, initial-scale=1">
    <title>Formulário PHPMailer</title>
 
<!--Layout-->
<link rel="stylesheet"href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
 
<!--JavaScript-->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
  </head>
 
  <body>
<div class="container">
<br>
  
<form class="form-horizontal"method="POST"action="envia.php"id="contato"enctype="multipart/form-data">
  <fieldset>
 
<!--Título doformulário-->
<legend>Formulário PHP-PHPMailer</legend>
 
<!--Campo:Nome-->
<div class="form-group">
  <label class="col-md-4 control-label"for="nome">Nome</label>  
<div class="col-md-4">
  <input id="nome"name="nome"placeholder="Informe seu nome"class="form-control input-md"required=""type="text">
</div>
</div>
 
<!--Campo:Email-->
<div class="form-group">
  <label class="col-md-4 control-label"for="nome">Email</label>  
<div class="col-md-4">
  <input id="email"name="email"placeholder="Informe seu email"class="form-control input-md"required=""type="text">
</div>
</div>
 
<!--Campo:Assunto-->
<div class="form-group">
  <label class="col-md-4 control-label"for="nome">Assunto</label>  
<div class="col-md-4">
  <input id="assunto"name="assunto"placeholder="Informe o assunto da mensagem"class="form-control input-md"required=""type="text">
</div>
</div>
 
<!--Campo:Mensagem-->
<div class="form-group">
  <label class="col-md-4 control-label"for="mensagem">Mensagem</label>
<div class="col-md-4">                    
  <textarea class="form-control"id="mensagem"name="mensagem"></textarea>
</div>
</div>
 
<!--BotãoEnviar-->
<center>
<div class="form-group">
  <label class="col-md-4 control-label"for="submit"></label>
<div class="col-md-4">
  <button type="submit"class="btn btn-inverse">Enviar</button>
</div>
</div>
 
  </fieldset>
</form>
 
</div>
  </body>
</html>

 

  • 4 Usuários acharam útil
Esta resposta lhe foi útil?

Artigos Relacionados

Vocês tem o módulo Magic_Quotes do PHP habilitado ?

Não, desde a versão 5.3 o magic_quotes_gpc não é indicado e nem colcoado como on - pro medida de...

Quais os caminhos (paths) da Perl ? O que é erro 500 em scripts PERL ?

Caminho para as aplicações do servidor para sistemas Linux perl: /usr/bin/perl...

Erro PHP: "Cannot modify header information"

O erro "Cannot modify header information" ocorre quando um script tem alguma saída HTML antes da...

Redirecionar http:// para https://

Para efetuar o redirecionamento de seus clientes automaticamente para uma página segura...