Home / E-mails / Formulário de contato com PHPMailer e SMTP

Formulário de contato com PHPMailer e SMTP

Olá, neste post 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.

Como usá-lo?
Iremos utilizar neste exemplo um script funcional, com um formulário em HTML que faz o envio das diretivas para o arquivo “enviar.php”, que inclui as funções contidas em “phpmailer.php”. Então, é uma estrutura com três arquivos, sendo eles:

formulario.html: É ele o responsável pelos campos do formulário e faz o envio das variáveis para o arquivo envia.php

envia.php: Processa as variáveis transportadas via POST do formulário e ativa as diretivas do phpmailer.php

phpmailer.php: Contém as orientações do PHP para, além de autenticar o disparo, incluir todas as linhas requeridas do header para um e-mail seguro.

Eis então os códigos:
Basicamente, o único arquio que requer alterações (além do formulario.html que você pode personalizar com CSS do jeito que preferir) é o envia.php, onde você colocará o seu usuário de acesso para autenticação do SMTP, sua senha e o endereço de destino, para onde as mensagens do formulário serão enviadas. Além disto, edite também o caminho onde o formulário é acessado e, por fim, o endereço da sua página.

Arquivo formulario.html

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Formulário de Contato</title>
<style type="text/css">
#contato {
font-family: Arial, Helvetica, sans-serif;
}

#contato input, #contato textarea {
font-family: Arial, Helvetica, sans-serif;
padding: 5px;
width: 250px;
}
</style>
</head>

<body>
<form action="envia.php" method="post" id="contato">
<fieldset>
<legend>Formulário de Contato</legend>

<label>Seu nome:</label><br />
<input name="nome" type="text" /><br /><br />

<label>Seu email:</label><br />
<input name="email" type="text" /><br /><br />

<label>Assunto:</label><br />
<input name="assunto" type="text" /><br /><br />

<label>Mensagem:</label><br />
<textarea name="mensagem" rows="10"></textarea><br /><br />

<input name="submit" type="submit" value="Enviar" style="width: auto;" />
</fieldset>
</form>
</body>
</html>

 


Arquivo envia.php

<?php

include_once('phpmailer.php'); //Chama o arquivo phpmailer.php com as funções para realizar o envio.

//#########################################
// Recebe as informações do formulário
//#########################################

$nome = $_POST['nome'];
$email = $_POST['email'];
$assunto = $_POST['assunto'];
$mensagem = $_POST['mensagem'];

//#########################################
// Dados da conta de e-mail que fará o envio
//#########################################

$smtp = new Smtp("mail.seudominio.com"); //Endereço do SMTP, geralmente mail.seudominio.com.
$smtp->user = "seuemail@provedor.com.br"; //Conta de email
$smtp->pass = "suasenha"; //Senha da Conta de e-mail.
$smtp->debug = false; //Somente para usuários avançados que desejam o log do envio para testes.

//#########################################
// Envio do formulário
//#########################################

$to = "email@destino.com.br"; //Informe aqui o e-mail que deve receber a mensagem do formulário.
$from = $email;
$subject = "Contato – " . $assunto;
$msg = $mensagem;

if (isset($_POST['submit'])) {
if($nome && $email && $assunto && $mensagem) {
if($smtp->Send($to, $from, $subject, $msg)){
echo "<script>alert('Contato enviado!');</script>";
echo "<script>window.location = 'index.php';</script>"; //Altere aqui para o endereço de sua página.
exit;
}
}

else {
echo "<script>alert('Preencha todos os campos!');</script>";
echo "<script>window.location = 'formulario.html';</script>"; //Altere aqui para o endereço de seu formulário
exit;
}

}

?>

 


Arquivo phpmailer.php

 

<?php

class Smtp{

var $conn;
var $user;
var $pass;
var $debug = false;

function Smtp($host){
$this->conn = fsockopen($host, 25, $errno, $errstr, 30);
$this->Put("EHLO $host");
}
function Auth(){
$this->Put("AUTH LOGIN");
$this->Put(base64_encode($this->user));
$this->Put(base64_encode($this->pass));
}
function Send($to, $from, $subject, $msg){

$this->Auth();
$this->Put("MAIL FROM: " . $from);
$this->Put("RCPT TO: " . $to);
$this->Put("DATA");
$this->Put($this->toHeader($to, $from, $subject));
$this->Put("\r\n");
$this->Put($msg);
$this->Put(".");
$this->Close();
if(isset($this->conn)){
return true;
}else{
return false;
}
}
function Put($value){
return fputs($this->conn, $value . "\r\n");
}
function toHeader($to, $from, $subject){
$header = "Message-Id: <". date('YmdHis').".". md5(microtime()).".". strtoupper($from) ."> \r\n";
$header .= "From: <" . $from . "> \r\n";
$header .= "To: <".$to."> \r\n";
$header .= "Subject: ".$subject." \r\n";
$header .= "Date: ". date('D, d M Y H:i:s O') ." \r\n";
$header .= "X-MSMail-Priority: High \r\n";
return $header;
}
function Close(){
$this->Put("QUIT");
if($this->debug == true){
while (!feof ($this->conn)) {
echo fgets($this->conn) . "<br>\n";
}
}
return fclose($this->conn);
}
}

?>

About sidnei

Check Also

Email falso utilizando seu nome

Cuidado, golpistas estão enviando emails falsos com seu nome!

Golpistas estão utilizando uma técnica semelhante ao golpe do whatsapp, enviando emails falsos com os seus dados. Fique atento a segurança do seu email.