Blog ComercialWeb - São Paulo - SP
E-mail: [email protected]
Atualizado: 10/10/2025

Como enviar e-mail em PHP com PHPMailer (SMTP) — guia prático

Envio de e-mails em PHP com PHPMailer

O PHPMailer é a biblioteca PHP mais popular para envio de e-mails via SMTP. Ele simplifica autenticação, criptografia (TLS/SSL), anexos e HTML, além de oferecer um debug útil para resolver problemas de configuração.

Instalação com Composer

# Dentro da pasta do seu projeto
composer require phpmailer/phpmailer

Exemplo básico: SMTP autenticado com TLS (porta 587)

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';

try {
  $mail = new PHPMailer(true);
  $mail->isSMTP();
  $mail->Host = 'smtp.seudominio.com';
  $mail->SMTPAuth = true;
  $mail->Username = '[email protected]';
  $mail->Password = 'senha-super-secreta'; // use variável de ambiente
  $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
  $mail->Port = 587;
  $mail->CharSet = 'UTF-8';

  $mail->setFrom('[email protected]', 'Seu Site');
  $mail->addAddress('[email protected]', 'Fulano');
  $mail->addReplyTo('[email protected]', 'Atendimento');

  $mail->isHTML(true);
  $mail->Subject = 'Bem-vindo!';
  $mail->Body = '<h3>Olá, Fulano!</h3><p>Sua conta foi criada.</p>';
  $mail->AltBody = 'Olá, Fulano! Sua conta foi criada.';

  $mail->send();
  echo 'Mensagem enviada com sucesso!';
} catch (Exception $e) {
  echo "Erro ao enviar: {$mail->ErrorInfo}";
}
?>

Como anexar arquivos

$mail->addAttachment(__DIR__ . '/docs/termos.pdf'); // anexo
$mail->addAttachment(__DIR__ . '/img/logo.png', 'logo.png'); // nome opcional

Usando Gmail (App Password)

Para usar o Gmail, ative a Verificação em duas etapas e gere uma Senha de app para SMTP. Configure assim:

$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = '[email protected]';
$mail->Password = 'sua-senha-de-app';
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port = 587;

Debug SMTP e erros comuns

$mail->SMTPDebug = \PHPMailer\PHPMailer\SMTP::DEBUG_SERVER; // detalhes do handshake
$mail->Debugoutput = 'html';
  • 535 Authentication failed: verifique usuário/senha, porta e tipo de criptografia.
  • Connection timed out: firewall bloqueando porta (587/465) ou host incorreto.
  • Certificado SSL: use hosts válidos e evite desativar verificação de peer.

Boas práticas

  • Guarde credenciais em variáveis de ambiente (sem versionar senhas).
  • Defina DKIM/SPF/DMARC no domínio para melhor entregabilidade.
  • Use UTF-8 no CharSet e prefira HTML + AltBody.
  • Padronize remetente (setFrom) e resposta (addReplyTo), evitando spoofing.

Perguntas frequentes

Como enviar pelo Gmail com PHPMailer?
Configure smtp.gmail.com, STARTTLS na porta 587 (ou SMTPS 465), ative 2FA e use uma Senha de app para autenticar.
Qual a diferença entre as portas 587 e 465?
A 587 negocia STARTTLS após conectar; a 465 inicia TLS direto (SMTPS). Use a que seu provedor suportar.
Erro 535 Authentication failed — como resolver?
Verifique credenciais, host, porta e criptografia. Em provedores como Gmail, use Senha de app e libere o acesso no painel.
Como anexar arquivos e definir HTML/charset?
Use addAttachment() para anexos, isHTML(true) e AltBody; defina CharSet = 'UTF-8' para acentuação.
Fonte: Redação


Mais Lidos

Ferramentas úteis

Precisa gerar senhas, validar CPF/CNPJ ou criar QR Code? Acesse nossos Geradores e Validadores Online.