Enviando e-mail com PHPMailer

Para enviar e-mail com PHPMailer, instale phpmailer/phpmailer com o Composer, configure seu servidor SMTP e o modo TLS com isSMTP() e chame $mail->send() dentro de um bloco try/catch.

A função nativa mail() do PHP entrega as mensagens ao binário local sendmail sem autenticação SMTP, sem negociação TLS e sem relatório de erros estruturado. O PHPMailer adiciona às aplicações PHP um cliente SMTP, formatação MIME e suporte a anexos.

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}";
}

Ajuste SMTPSecure à porta do seu servidor: ENCRYPTION_STARTTLS na porta 587 atualiza uma conexão em texto claro para TLS, e ENCRYPTION_SMTPS na porta 465 negocia TLS imediatamente. Definir isHTML(true) marca Body como HTML e inclui AltBody como a parte em texto puro para clientes que não renderizam HTML. Incluir as duas partes também melhora a entregabilidade. Passar true ao construtor faz com que as falhas lancem uma Exception em vez de retornarem false.

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

Para enviar e-mail a partir do PHP por HTTPS sem gerenciar uma conexão SMTP, instale o Bird PHP SDK (composer require messagebird/sdk) e chame $bird->email->send():

<?php
use MessageBird\Bird;

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

$message = $bird->email->send(
    from: "onboarding@messagebird.dev",
    to: ["delivered@messagebird.dev"],
    subject: "Hello from PHP",
    html: "<p>It works.</p>",
);

echo $message->getId(), " ", $message->getStatus(), "\n";

O remetente onboarding@messagebird.dev e o destinatário de sandbox delivered@messagebird.dev verificam sua chave API e o payload antes de você configurar um domínio próprio.

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.

Start building with Bird in minutes.