segunda-feira, 10 de abril de 2023

Melhorando o envio de formulários com PHP e SMTP

Introdução ao envio seguro de dados em formulários PHP

Olá! Neste post, mostraremos como é fácil criar ou utilizar um script PHP. Esse script garantirá o envio seguro dos dados dos seus formulários. Além disso, ele permitirá a autenticação ao servidor SMTP. Assim, você terá uma maior chance de as mensagens chegarem diretamente na caixa de entrada dos destinatários.

Problemas com a função mail() sem autenticação

É comum observarmos casos de "invasões" em formulários comuns. Eles utilizam a função mail() sem autenticação. Isso acaba comprometendo não apenas o servidor, mas também pode levar ao bloqueio ou suspensão da conta de hospedagem.

Vantagens da classe PHPMailer em relação à classe mail() padrão

Basicamente, PHPMailer é uma classe PHP com funções avançadas. Ela oferece vantagens em relação à classe mail() padrão. Um dos diferenciais é o envio seguro, principalmente para servidores que exigem autenticação.

Autenticação SMTP e garantia de envio pela conta autenticada

A classe PHPMailer faz a autenticação do usuário e senha do SMTP no servidor. Isso garante que o e-mail está sendo enviado realmente pela conta autenticada. Já na função mail() padrão, não há autenticação. Por isso, servidores podem rejeitar o recebimento dessas mensagens – o que ocorre com frequência em grandes provedores.

Passo a passo para usar o PHPMailer

Vamos utilizar um exemplo funcional, com um formulário em HTML e um arquivo "enviar.php" que inclui as funções contidas em "phpmailer.php". A estrutura possui três arquivos:

Arquivos necessários para a implementação

  1. formulario.html: Responsável pelos campos do formulário e pelo envio das variáveis para o arquivo envia.php.
  2. envia.php: Processa as variáveis transportadas via POST do formulário e ativa as diretivas do phpmailer.php.
  3. phpmailer.php: Contém as orientações do PHP para autenticar o disparo e incluir todas as linhas requeridas do header para um e-mail seguro.
Personalizando e configurando os arquivos Os códigos estão prontos para uso. O único arquivo que requer alterações (além do formulario.html, que você pode personalizar com CSS como preferir) é o envia.php. Nele, você deve inserir seu usuário de acesso para autenticação do SMTP, sua senha e o endereço de destino das mensagens do formulário. Além disso, edite o caminho onde o formulário é acessado e, por fim, o endereço da sua página.

Arquivo formulario.html

Formulário de Contato
Formulário de Contato












 

Arquivo envia.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 ""; echo ""; //Altere aqui para o endereço de sua página. exit;
else echo ""; echo ""; //Altere aqui para o endereço de seu formulário exit;
?>
 

Arquivo phpmailer.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) . "
\n";
return fclose($this->conn);
?>

É importante informar que você deve colocar uma captcha nesses formulários, uma sugestão será utilizar reCAPTCHA do Google.

Segue abaixo link com informações de integração: https://developers.google.com/recaptcha/docs/display?hl=pt-br https://blog.atarweb.com.br/formulario-de-contato-com-phpmailer-e-smtp/?feed_id=311&_unique_id=64341b19d33e9

Nenhum comentário:

Postar um comentário