Pular para o conteúdo

Tutoriais5 min de leitura

Como enviar e-mails com Laravel

Aprenda a enviar e-mails no Laravel com o pacote Emailit Laravel. Ele se integra como um transporte de e-mail nativo e dá acesso completo à API do Emailit por meio de uma Facade.

GPor

Como enviar e-mails com Laravel

O Laravel já vem com um excelente suporte nativo a e-mail, mas você ainda precisa de um serviço de entrega confiável por trás dele. O pacote Emailit Laravel se conecta diretamente ao sistema de e-mail do Laravel como um transporte nativo. Seus Mailables, Notifications e chamadas Mail::send() existentes funcionam sem nenhuma alteração no código. Além disso, você tem acesso completo à API do Emailit por meio de uma Facade prática.

Enviar e-mails é uma das tarefas mais comuns em qualquer aplicação Laravel. Confirmações de cadastro, redefinições de senha, recibos de pedidos, atualizações de entrega e newsletters de marketing dependem de uma entrega de e-mail confiável. Embora o Laravel forneça uma poderosa camada de abstração de e-mail, a entrega real ainda depende do transporte que você configurar. Usar uma API de e-mail como o Emailit oferece alta entregabilidade, rastreamento de entrega, gerenciamento de bounces e análises detalhadas, sem ter que gerenciar servidores SMTP ou se preocupar com reputação de IP.

Neste guia, vamos configurar o Emailit em uma aplicação Laravel e enviar e-mails tanto pelo sistema de e-mail padrão do Laravel quanto pela Facade do Emailit.

Requisitos

  • PHP 8.1 ou superior
  • Laravel 10, 11 ou 12
  • Uma conta no Emailit com uma chave de API

Instalação

Instale o pacote via Composer:

composer require emailit/emailit-laravel

O pacote registra o próprio service provider automaticamente (auto-discovery), então não é preciso registrá-lo à mão. Ele funciona com Laravel 10, 11 e 12 sem nenhuma configuração extra.

Configuração

Adicione sua chave de API ao .env:

EMAILIT_API_KEY=sua_chave_api

Defina o Emailit como seu mailer padrão:

MAIL_MAILER=emailit

Adicione o mailer emailit ao array de mailers do seu config/mail.php:

'mailers' => [
    // ...

    'emailit' => [
        'transport' => 'emailit',
    ],
],

Opcionalmente, publique o arquivo de configuração para personalizar a URL base da API:

php artisan vendor:publish --tag=emailit-config

A configuração é mínima de propósito. Depois que você define a chave de API e o mailer padrão, o Laravel passa a enviar automaticamente todos os e-mails de saída pelo Emailit. Não há necessidade de configurar hosts SMTP, portas, configurações de criptografia ou credenciais de autenticação como você faria com uma configuração tradicional de servidor de e-mail.

Como enviar e-mails com o Laravel Mail

Depois da configuração, todos os recursos de e-mail do Laravel funcionam normalmente. Nada no seu código atual precisa mudar.

Com um Mailable

Crie uma classe Mailable como você normalmente faria:

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;

class EmailBoasVindas extends Mailable
{
    use Queueable, SerializesModels;

    public function __construct(
        public readonly User $user,
    ) {}

    public function envelope(): Envelope
    {
        return new Envelope(
            subject: 'Bem-vindo ao Nosso App',
        );
    }

    public function content(): Content
    {
        return new Content(
            view: 'emails.boas-vindas',
        );
    }
}

Depois, envie:

use Illuminate\Support\Facades\Mail;
use App\Mail\EmailBoasVindas;

Mail::to('usuario@exemplo.com')->send(new EmailBoasVindas($user));

E-mails em fila, Mailables Markdown e Notifications funcionam exatamente como você esperaria. O Emailit fica, de forma transparente, por trás da camada de e-mail do Laravel, então você pode colocá-lo no lugar de qualquer transporte que já usa, como SMTP, Mailgun ou SES, sem mexer no código da aplicação. Assim fica fácil testar o Emailit ao lado do seu provedor atual ou migrar aos poucos.

Com a Facade do Emailit

Para recursos que vão além do que o sistema de e-mail do Laravel oferece, como templates com variáveis, envios agendados ou gerenciamento de recursos da API, use a Facade Emailit. Ela oferece acesso direto ao SDK PHP do Emailit completo.

Enviar um e-mail via API

use Emailit\Laravel\Facades\Emailit;

$email = Emailit::emails()->send([
    'from'    => 'ola@seudominio.com',
    'to'      => ['usuario@exemplo.com'],
    'subject' => 'Olá do Emailit',
    'html'    => '<h1>Bem-vindo!</h1>',
]);

echo $email->id;
echo $email->status;

Enviar com um template

Use os templates que você criou no painel do Emailit e passe variáveis dinâmicas:

use Emailit\Laravel\Facades\Emailit;

$email = Emailit::emails()->send([
    'from'      => 'ola@seudominio.com',
    'to'        => 'usuario@exemplo.com',
    'template'  => 'email_boas_vindas',
    'variables' => [
        'nome'    => 'João Silva',
        'empresa' => 'Acme Ltda',
    ],
]);

Usar templates do lado do servidor é um padrão poderoso para aplicações Laravel. Designers e profissionais de marketing podem atualizar o conteúdo, o estilo e o layout dos e-mails no painel do Emailit sem mudanças no código nem novos deploys. O código PHP só precisa passar os dados, e o template cuida da renderização.

Agendar um e-mail

use Emailit\Laravel\Facades\Emailit;

$email = Emailit::emails()->send([
    'from'         => 'lembretes@seudominio.com',
    'to'           => 'usuario@exemplo.com',
    'subject'      => 'Lembrete de Consulta',
    'html'         => '<p>Sua consulta é amanhã às 14h.</p>',
    'scheduled_at' => '2026-04-10T09:00:00Z',
]);

E-mails agendados são tratados inteiramente pela API do Emailit, o que significa que funcionam independentemente do seu sistema de filas do Laravel. Isso é ideal para lembretes de consultas, avisos de renovação de assinatura e campanhas com hora marcada, em que você quer a entrega garantida em um horário específico, mesmo que o seu servidor de aplicação fique fora do ar.

Enviar com anexos

use Emailit\Laravel\Facades\Emailit;

$email = Emailit::emails()->send([
    'from'        => 'faturas@seudominio.com',
    'to'          => 'cliente@exemplo.com',
    'subject'     => 'Sua Fatura #12345',
    'html'        => '<p>Segue sua fatura em anexo.</p>',
    'attachments' => [
        [
            'filename'     => 'fatura.pdf',
            'content'      => base64_encode(file_get_contents('fatura.pdf')),
            'content_type' => 'application/pdf',
        ],
    ],
]);

Gestão de recursos

A Facade expõe todos os serviços da API do Emailit, então você pode gerenciar toda a sua infraestrutura de e-mail a partir do Laravel.

Domínios

use Emailit\Laravel\Facades\Emailit;

$domain = Emailit::domains()->create([
    'name' => 'exemplo.com',
    'track_loads' => true,
    'track_clicks' => true,
]);

$domain = Emailit::domains()->verify('sd_123');

Gerenciar domínios de envio pela API é útil para plataformas SaaS que precisam configurar domínios personalizados para cada cliente. Você pode automatizar todo o fluxo de verificação de domínio, incluindo verificações de registros DNS, diretamente da sua aplicação Laravel.

Contatos

use Emailit\Laravel\Facades\Emailit;

$contact = Emailit::contacts()->create([
    'email' => 'usuario@exemplo.com',
    'first_name' => 'João',
    'last_name' => 'Silva',
]);

$contacts = Emailit::contacts()->list();

Verificação de e-mail

use Emailit\Laravel\Facades\Emailit;

$result = Emailit::emailVerifications()->verify([
    'email' => 'teste@exemplo.com',
]);

echo $result->status; // valid
echo $result->risk;   // low

Verificar os endereços de e-mail no cadastro ou no envio de um formulário ajuda você a manter a lista de contatos limpa e protege a sua reputação de remetente. Altas taxas de bounce de endereços inválidos podem fazer seus e-mails caírem em pastas de spam, então a verificação é uma boa prática para qualquer aplicação Laravel que envia e-mails transacionais ou de marketing em escala.

Injeção de dependência

Se preferir não usar Facades, você pode injetar o cliente diretamente:

use Emailit\EmailitClient;

class EmailController extends Controller
{
    public function send(EmailitClient $emailit)
    {
        $email = $emailit->emails()->send([
            'from'    => 'ola@seudominio.com',
            'to'      => ['usuario@exemplo.com'],
            'subject' => 'Olá',
            'html'    => '<p>Oi!</p>',
        ]);

        return response()->json(['id' => $email->id]);
    }
}

O container de serviços do Laravel resolve automaticamente a instância EmailitClient com a chave de API da sua configuração, então você tem a mesma praticidade da Facade com os benefícios de testabilidade da injeção de dependência.

Tratamento de erros

O SDK PHP subjacente lança exceções tipadas, então você pode capturar tipos específicos de erro:

use Emailit\Exceptions\AuthenticationException;
use Emailit\Exceptions\RateLimitException;
use Emailit\Exceptions\ApiErrorException;
use Emailit\Laravel\Facades\Emailit;

try {
    Emailit::emails()->send([...]);
} catch (AuthenticationException $e) {
    // Chave de API inválida (401)
} catch (RateLimitException $e) {
    // Muitas requisições (429)
} catch (ApiErrorException $e) {
    // Qualquer outro erro da API
    echo $e->getHttpStatus();
}

Em uma aplicação Laravel, você também pode tratar essas exceções globalmente no seu exception handler ou usar um middleware para capturar erros de limite de taxa e implementar novas tentativas automáticas. Isso garante que sua aplicação permaneça resiliente mesmo ao enviar grandes volumes de e-mail.

Todos os serviços disponíveis

A Facade oferece acesso a tudo na API do Emailit:

Serviço

Uso

Descrição

Emails

Emailit::emails()

Enviar, listar, obter, cancelar e tentar de novo e-mails

Domains

Emailit::domains()

Criar, verificar, listar e gerenciar domínios de envio

API Keys

Emailit::apiKeys()

Criar, listar e gerenciar chaves de API

Audiences

Emailit::audiences()

Criar, listar e gerenciar listas de contatos

Subscribers

Emailit::subscribers()

Adicionar, listar e gerenciar inscritos

Templates

Emailit::templates()

Criar, listar e publicar templates de e-mail

Suppressions

Emailit::suppressions()

Criar, listar e gerenciar endereços suprimidos

Email Verifications

Emailit::emailVerifications()

Verificar endereços de e-mail

Email Verification Lists

Emailit::emailVerificationLists()

Verificação de e-mails em massa

Webhooks

Emailit::webhooks()

Criar, listar e gerenciar webhooks

Contacts

Emailit::contacts()

Criar, listar e gerenciar contatos

Events

Emailit::events()

Listar e obter eventos

Comece agora

Instale o pacote e comece a enviar em menos de um minuto:

composer require emailit/emailit-laravel

Confira a documentação completa do pacote no GitHub, o SDK PHP do Emailit, que é o cliente por trás do pacote, ou consulte a referência da API para ver os detalhes de cada endpoint.

Compartilhar

Experimente o que você acabou de ler.

3.000 e-⁠mails por mês grátis. Sem cartão de crédito.

3.000 e-⁠mails por mês grátis · Sem cartão de crédito