Criando um formulário em PHP autenticado

Um formulário de contato em seu site facilita a comunicação de seus clientes e pessoas que têm interesse em seu negócio. No caso do PHPMailer, o envio é feito de forma autenticada.

Isto é, você utiliza o servidor SMTP do seu domínio para enviar as mensagens, que é o ideal, em termos de segurança. Você pode criar uma conta apenas para envios de formulários ou usar o recurso de "senhas de aplicações", para ter uma senha alternativa de uma mesma conta, evitando assim, que uma mudança de senha da conta quebre o formulário.

E como utilizar essa classe de envio?

Para conseguir enviar emails pelo seu site via autenticação SMTP será necessário fazer uso da classe. Portanto, clique aqui para fazer o download do PHPMailer versão de 5.2.23 (abril de 2017).

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 nome envia.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”: Host de envio SMTP, caso use nosso serviço, smtp.emailarray.com
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 alterar conforme o seu domínio!
 $mail->IsSMTP(); // Define que a mensagem será SMTP
 $mail->Host = "smtp.seudominio.com.br"; // Seu endereço de host SMTP, caso use nosso serviço, smtp.emailarray.com
 $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 = true; // 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('recebe3@dominio.com.br'); // Define qual conta de email receberá uma cópia
 //$mail->AddBCC('recebebcc@dominio.com.br'); // 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']."
"; // Texto da mensagem
 $mail->Body .= " E-mail: ".$_POST['email']."
"; // Texto da mensagem
 $mail->Body .= " Assunto: ".$_POST['assunto']."
"; // Texto da mensagem
 $mail->Body .= " Mensagem: ".nl2br($_POST['mensagem'])."
"; // 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 "Detalhes do erro: " . $mail->ErrorInfo;
 }

Tudo certo até aqui! Como colocar o formulário no site?

Clique aqui para baixar o arquivo form.php e o insira dentro do mesmo diretório onde colocou o arquivo acima .

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

O exemplo acima, não tem captcha (confirmação visual, para evitar spams), essencial nos dias hoje. Você pode implementar um captcha através de sistemas/scripts gratuitos como Google reCAPTCHA ou hCaptcha.

Um bom exemplo, em inglês, de configuração do reCAPTCHA: https://www.rafaelwendel.com/en/2021/08/how-to-insert-a-google-recaptcha-on-your-website/