Como enviar e-mails autenticados em PHP com PHPMailer?

Neste guia, você aprenderá a configurar o envio de e-mails autenticados utilizando a biblioteca PHPMailer, através de uma conexão SMTP segura e autenticada, respeitando os limites e as políticas de envio permitidos pela nossa infraestrutura.

IMPORTANTE: O envio de e-mails em massa caracterizado como Spam é expressamente proibido em nossa rede. O uso do PHPMailer não altera ou elimina os limites de envio e as políticas antispam aplicáveis ao serviço.

Para mais informações, consulte:

O que é PHPMailer?

O PHPMailer é uma biblioteca para PHP utilizada principalmente para o envio de e-mails através do protocolo SMTP. Ela oferece recursos para autenticação SMTP, conexão segura utilizando TLS, definição de remetentes e destinatários, envio de mensagens em HTML, anexos, entre outros recursos. O PHPMailer é uma alternativa mais completa e flexível ao uso direto da função nativa mail() do PHP, especialmente quando é necessário realizar autenticação em um servidor SMTP.

Configurando o envio de e-mails autenticados

1.Instalação do PHPMailer


A forma recomendada de instalar o PHPMailer é utilizando o Composer.

No diretório do seu projeto, execute:

composer require phpmailer/phpmailer

Após a instalação, o carregamento da biblioteca poderá ser realizado através do autoload.php gerado pelo Composer.

NOTA: Caso o Composer não esteja disponível no ambiente, também é possível realizar a instalação manual da biblioteca a partir do repositório oficial do PHPMailer. Repositório oficial do PHPMailer no GitHub

2. Configurando o envio SMTP

Crie ou edite o arquivo PHP responsável pelo envio de e-mails. O exemplo abaixo utiliza SMTP autenticado através da porta 587 com STARTTLS, que é o método recomendado para conexões SMTP autenticadas:

<?php

require __DIR__ . '/vendor/autoload.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

$mail = new PHPMailer(true);

try {
    // Configurações do servidor SMTP
    $mail->isSMTP();
    $mail->Host       = 'mail.seudominio.com.br';
    $mail->SMTPAuth   = true;
    $mail->Username   = 'seuemail@seudominio.com.br';
    $mail->Password   = 'suasenha';

    // Conexão segura utilizando STARTTLS
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->Port       = 587;

    // Configurações do remetente e destinatário
    $mail->setFrom('seuemail@seudominio.com.br', 'Seu Nome');
    $mail->addAddress('destinatario@dominio.com.br', 'Nome do Destinatário');

    // Conteúdo da mensagem
    $mail->isHTML(true);
    $mail->Subject = 'Assunto do e-mail';
    $mail->Body    = '<h1>Olá!</h1><p>Esta é uma mensagem de teste enviada utilizando o PHPMailer.</p>';
    $mail->AltBody = 'Olá! Esta é uma mensagem de teste enviada utilizando o PHPMailer.';

    // Envio da mensagem
    $mail->send();

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

3. Parâmetros da configuração SMTP

Os principais parâmetros utilizados no exemplo são:

Endereço do servidor SMTP utilizado para o envio:

host

Habilita a autenticação SMTP:

SMTPAuth

Usuário utilizado para autenticação:

Username

Senha da conta de e-mail:

Password

Define o método de criptografia utilizado na conexão:

SMTPSecure

Porta utilizada pelo servidor SMTP:

Port

Define o endereço e o nome do remetente:

setFrom()

Define o endereço e o nome do remetente:

addAddress()

4. Porta e criptografia

Recomendamos utilizar a porta 587 com STARTTLS para conexões SMTP autenticadas.
No PHPMailer, essa configuração é feita através de:

$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->Port       = 587;

NOTA: A porta 465, que utiliza TLS desde o início da conexão, deve ser utilizada somente em último caso, quando o servidor SMTP de destino não disponibilizar a porta 587 ou exigir especificamente esse método de conexão.

Quando for necessário utilizar a porta 465, a configuração deverá ser:

$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
$mail->Port       = 465;

5. Usuário e senha

O Username e o Password devem corresponder a uma conta de e-mail válida e autorizada a realizar o envio através do servidor SMTP.
Exemplo:

$mail->Username = 'seuemail@seudominio.com.br';
$mail->Password = 'suasenha';

IMPORTANTE: Evite manter senhas diretamente no código-fonte, principalmente em aplicações que utilizam controle de versão, como Git. Sempre que possível, armazene as credenciais em variáveis de ambiente ou em um mecanismo seguro de gerenciamento de configurações.

6. Testando o envio

Após realizar as configurações, execute a aplicação ou o script responsável pelo envio.
Em caso de sucesso, o exemplo apresentado exibirá:

Mensagem enviada com sucesso!

Caso ocorra uma falha, o PHPMailer exibirá uma mensagem contendo informações sobre o erro:

Erro ao enviar mensagem: ...

Essas informações podem ajudar a identificar problemas relacionados a:

  • Usuário ou senha incorretos;
  • Servidor SMTP incorreto;
  • Porta SMTP bloqueada;
  • Falha na negociação TLS;
  • Certificado inválido;
  • Falha de conexão com o servidor SMTP;
  • Remetente não autorizado;
  • Destinatário rejeitado pelo servidor;
  • Limites de envio atingidos.

Boas práticas

Ao utilizar o PHPMailer para envio de e-mails, recomendamos:

  • Utilizar sempre SMTP autenticado.
  • Preferir a porta 587 com STARTTLS.
  • Utilizar a porta 465 somente quando necessário.
  • Não armazenar senhas diretamente no código-fonte.
  • Utilizar uma conta de e-mail válida para autenticação.
  • Não utilizar contas ou credenciais de terceiros sem autorização.
  • Respeitar os limites de envio definidos para o serviço.
  • Não utilizar a aplicação para envio de Spam ou mensagens não solicitadas.
  • Manter o PHPMailer atualizado para receber correções de segurança e melhorias.

Documentação oficial

Para mais informações, consulte a documentação do PHPMailer.

AVISO LEGAL: Os procedimentos descritos neste documento devem ser executados de acordo com o contexto de cada sistema, de forma a evitar impactos negativos à segurança, disponibilidade, integridade e privacidade de dados. A Nevolus se reserva o direito de modificar a qualquer tempo e sem aviso prévio as informações aqui apresentadas a fim de refletir o lançamento de novos serviços, atualizações físicas e operacionais, e evolução do estado-da-arte da tecnologia.

Posts Similares