Email

Enviando e-mail com PHPMailer

PHPMailer é a biblioteca mais usada para enviar e-mail com PHP. Ela encapsula SMTP para que você configure host, porta e credenciais uma vez e depois construa e envie mensagens com uma API de objetos clara. A função nativa mail() do PHP faz pouco demais (sem autenticação, relatório de erros fraco), e é por isso que a maioria dos projetos usa PHPMailer. Aqui está um envio completo e funcional.

Como instalar o PHPMailer?

Use o Composer:

composer require phpmailer/phpmailer

Depois carregue o autoloader e importe as classes necessárias:

<?php
require "vendor/autoload.php";

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

Como configurar SMTP e enviar uma mensagem?

Crie uma instância de PHPMailer, ative o modo SMTP com isSMTP() e defina os campos de conexão e mensagem. Envolva a chamada em try/catch para que uma falha no envio seja reportada em vez de engolida:

<?php
$mail = new PHPMailer(true); // true enables exceptions

try {
    // Server settings
    $mail->isSMTP();
    $mail->Host       = "smtp.example.com";
    $mail->SMTPAuth   = true;
    $mail->Username   = getenv("SMTP_USER");
    $mail->Password   = getenv("SMTP_PASS");
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->Port       = 587;

    // Recipients
    $mail->setFrom("you@yourdomain.com", "Your App");
    $mail->addAddress("recipient@example.org", "Recipient Name");

    // Content
    $mail->isHTML(true);
    $mail->Subject = "Your receipt";
    $mail->Body    = "<p>Thanks for your order.</p>";
    $mail->AltBody = "Thanks for your order. This is the plain-text version.";

    $mail->send();
    echo "Message sent.";
} catch (Exception $e) {
    echo "Send failed: {$mail->ErrorInfo}";
}

Alguns detalhes que confundem as pessoas. SMTPSecure e Port andam juntos: use ENCRYPTION_STARTTLS com 587 ou ENCRYPTION_SMTPS com 465. isHTML(true) informa ao PHPMailer que o Body é HTML e que deve enviar AltBody como alternativa em texto puro. Passe true ao construtor para que falhas lancem uma Exception em vez de retornarem false silenciosamente.

Como adicionar um anexo?

Chame addAttachment com o caminho do arquivo antes de send():

<?php
$mail->addAttachment("./invoices/invoice-1042.pdf", "invoice.pdf");

O segundo argumento renomeia o arquivo como o destinatário o vê. Você pode chamá-lo mais de uma vez para múltiplos anexos.

Envie com Bird

PHPMailer fala SMTP, o que significa que produção precisa de um servidor de e-mail com boa reputação, registros de autenticação corretos e um lugar para ver o que aconteceu após o envio. Uma HTTP API elimina o servidor. Você envia JSON por HTTPS e recebe uma resposta estruturada. Com o Bird email API a mesma mensagem é uma única chamada:

use Bird\Bird;

$bird = new Bird(getenv("BIRD_API_KEY"));

$bird->emails->send([
  "from"    => "you@yourdomain.com",
  "to"      => "delivered@bird.dev",
  "subject" => "Hello from PHP",
  "html"    => "<p>It works.</p>",
]);

O endereço sandbox delivered@bird.dev sempre aceita e-mails, então você pode verificar a integração antes de enviar para caixas de entrada reais. Sem socket SMTP, sem escolha de porta, sem reputação para aquecer por conta própria.

FAQ

Por que não usar simplesmente a função mail() do PHP?

mail() entrega a mensagem ao binário sendmail local sem autenticação SMTP e quase sem relatório de erros. PHPMailer autentica contra um servidor remoto, suporta TLS, constrói mensagens multipart e informa por que o envio falhou.

Qual é a diferença entre Body e AltBody?

Body é a versão HTML e AltBody é o fallback em texto puro. Com isHTML(true) definido, clientes que não conseguem renderizar HTML mostram AltBody, o que também ajuda na entregabilidade.

STARTTLS ou SMTPS?

ENCRYPTION_STARTTLS na porta 587 atualiza uma conexão simples para TLS, enquanto ENCRYPTION_SMTPS na porta 465 já é criptografado desde o início. Use a configuração correspondente à porta que seu servidor de e-mail espera.

PHPMailer é a ferramenta certa quando você quer enviar por SMTP a partir do PHP. Se preferir não operar o servidor, o guia de envio de e-mail mostra o caminho via API em detalhes.

Construa na mesma rede.

Uma chave de API de teste é sua imediatamente. A produção é desbloqueada quando adicionar um método de pagamento e verificar um remetente.

Sua próxima ideia.
Pronta para conectar.