Revisão técnica: 08/09/2026. SMTP autenticado permite que uma aplicação envie mensagens por uma conta autorizada. Ele não impede sozinho o abuso de um formulário. O processamento também precisa validar campos, limitar envios e manter destinatários e credenciais sob controle.
Use uma biblioteca mantida
Prefira a biblioteca de e-mail do framework ou uma solução como PHPMailer. O código antigo deste artigo montava SMTP manualmente, autenticava sem iniciar TLS e anunciava sucesso sem verificar o resultado. Ele foi retirado.
A função mail() do PHP não é uma classe e não é, por si só, a causa de spam. A escolha do transporte precisa considerar a infraestrutura e os controles da aplicação.
Configure o transporte com dados do provedor
O trecho abaixo é apenas a configuração de transporte, não um formulário completo. Pressupõe PHPMailer instalado pelo Composer, autoload carregado e variáveis de ambiente definidas de forma privada. O exemplo usa STARTTLS na porta 587; confirme essa combinação com o serviço.
$mail = new \PHPMailer\PHPMailer\PHPMailer(true);
$mail->isSMTP();
$mail->Host = getenv('SMTP_HOST');
$mail->SMTPAuth = true;
$mail->Username = getenv('SMTP_USER');
$mail->Password = getenv('SMTP_PASSWORD');
$mail->SMTPSecure = \PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;
$mail->CharSet = 'UTF-8';
Valide a presença das configurações antes de usar o transporte e mantenha a verificação do certificado TLS. Não adivinhe o servidor a partir do domínio do usuário nem grave a senha em repositório público.
Controle o conteúdo e os destinatários
Defina no servidor um remetente autorizado e o destinatário interno do contato. O e-mail validado do visitante pode ser usado em Reply-To; não permita que ele escolha qualquer destinatário ou se apresente como remetente autenticado.
Aceite somente os campos previstos, confira tipos e limites e não transforme todo o POST em mensagem. Prefira corpo em texto simples ou codifique corretamente os valores inseridos em HTML. Aplique controles de frequência e a proteção contra automação adequada ao formulário antes de enviar.
Trate o resultado e teste falhas
Chame o envio somente depois das verificações e trate as exceções. Registre detalhes técnicos em local restrito, com uma resposta clara ao visitante. Aceitação pelo servidor SMTP não garante chegada à caixa de entrada.
Em teste, confira dados inválidos, repetição de envio e falha de autenticação, além do caso correto. Referência: documentação e exemplos oficiais do PHPMailer.