Dev Life

Como enviar e-mails usando o Laravel e o Mailgun

O Laravel oferece recursos eficientes de e-mail que combinam perfeitamente com o serviço de entrega de e-mail confiável do Mailgun. Saiba como configurar o Laravel para enviar e-mails pelo Mailgun, criar e-mails de boas-vindas para novos usuários e implementar recursos avançados para uma melhor entregabilidade.
Imagem para Como enviar e-mails usando o Laravel e o Mailgun

Seja para enviar links de redefinição de senha, confirmações de pedidos ou newsletters de marketing, a entrega de e-mail confiável é essencial para qualquer aplicativo do Laravel. Ao combinar o elegante sistema de e-mail do Laravel com a poderosa API de e-mail do Mailgun, você pode garantir que as suas mensagens importantes cheguem à caixa de entrada. 

Neste guia, vamos detalhar o processo de integração do Mailgun com o Laravel, desde a configuração inicial até o envio do seu primeiro e-mail de boas-vindas automatizado. Você também aprenderá sobre recursos avançados, como rastreamento de e-mail, anexos e tratamento de erros adequado. 

Pré-requisitos

Antes de se aprofundar na integração, certifique-se de ter: 

  • Conhecimento básico sobre o Laravel e o PHP 
  • PHP e Composer instalados localmente 
  • Node.js e npm instalados localmente 
  • Um editor de código (usaremos o Visual Studio Code) 
  • Uma conta do Mailgun (ajudaremos com a configuração) 

Como configurar a sua conta do Mailgun 

Vamos começar preparando as suas credenciais do Mailgun. Se ainda não tiver feito isso, crie uma conta gratuita em nossa página de cadastro. Após se cadastrar, você precisará ativar a sua conta através do e-mail de confirmação que enviaremos. 

creating a free Mailgun account

No painel do Mailgun, reúna estes três itens essenciais:  

1. Seu domínio do Mailgun: acesse “Enviar” > “Envio” > “Domínios” e copie o seu nome de domínio. 

Getting the Mailgun domain

2. Sua chave de API: clique no menu suspenso da sua conta, selecione “API Security” e crie uma nova chave de API. 

Getting the API key 

Na página de chaves de API, crie uma nova chave de API clicando no botão “Add new key” e fornecendo a descrição da chave no modal “New API Key”. Certifique-se de copiar o valor da sua chave de API, pois você só poderá vê-la uma vez: 

New key details 

3. Sua região: verifique a barra de navegação superior para confirmar se você está na região da UE ou dos EUA. 

Confirming the region 
Usando um domínio de sandbox para testes? Adicione até cinco destinatários autorizados através da página “Overview” do seu domínio para garantir que os e-mails de teste sejam entregues.

4. Domínio de sandbox: por fim, como você usará o seu domínio de sandbox neste guia, não se esqueça de configurar os destinatários autorizados. Isso garante que os e-mails enviados do seu domínio de sandbox sejam entregues apenas aos destinatários que você autorizou explicitamente, pois os domínios de sandbox são limitados a testes e restritos a destinatários específicos. 

Você pode fazer isso acessando a página “Overview” do seu domínio, inserindo o endereço de e-mail e clicando em “Save Recipient”:

Adding authorized recipient 

Como configurar o Laravel para o Mailgun 

Depois de obter todas as credenciais necessárias no painel do Mailgun, é hora de configurar o Laravel para usar o Mailgun. Aqui, você criará um aplicativo do Laravel e atualizará as variáveis de ambiente relacionadas a e-mail com os valores obtidos anteriormente. Em seguida, você enviará um e-mail de boas-vindas aos novos usuários.  

Para conseguir isso, você usará o kit de início do Laravel Breeze para configurar a autenticação no seu aplicativo e usar o Mail facade para adicionar a funcionalidade de enviar um e-mail a um novo usuário assim que ele se cadastrar. 

Para criar um aplicativo do Laravel, execute o seguinte comando no seu terminal: 

Como criar o seu projeto do Laravel

Bash

                                

                                    composer create-project laravel/laravel laravel-mailgun-demo rncd laravel-mailgun-demo rncomposer require laravel/breeze --dev rnphp artisan breeze:install 
                                
                            

Quando solicitado, use as seguintes informações: 

  • Qual stack do Breeze você gostaria de instalar? Blade com Alpine 
  • Você gostaria de suporte ao modo escuro? Não 
  • Qual framework de testes você prefere? PHPUnit 

Depois que tudo estiver instalado, não se esqueça de compilar os ativos de front-end do seu aplicativo:  

Bash 

                                

                                    npm install
                                
                            

Como configurar os e-mails
Agora que você tem um aplicativo do Laravel funcional com a autenticação configurada, é possível atualizar as variáveis de ambiente relacionadas a e-mail. Abra o seu arquivo .env e comente MAIL_HOST, MAIL_PORT, MAIL_USERNAME, MAIL_PASSWORD, e MAIL_ENCRYPTION

Substitua o valor de MAIL_MAILER por mailgun para configurar o aplicativo a fim de usar o driver do Mailgun e substitua o valor de MAIL_FROM_ADDRESS pelo seu endereço de e-mail. 

Em seguida, logo abaixo das variáveis de ambiente relacionadas a e-mail, adicione as seguintes variáveis de ambiente específicas do Mailgun e não se esqueça de substituir os valores de placeholder pelos valores reais que você obteve no painel do Mailgun: 

                                

                                    MAILGUN_DOMAIN=<YOUR-MAILGUN-DOMAIN> rnMAILGUN_SECRET=<YOUR-MAILGUN-API-KEY> rnMAILGUN_ENDPOINT=api.mailgun.net 
                                
                            
Se a sua região no painel do Mailgun for a UE, defina o valor de MAILGUN_ENDPOINT como api.eu.mailgun.net.

Instalação dos pacotes necessários 

Para usar o driver do Mailgun a fim de enviar e-mails, é preciso instalar o Symfony Mailgun Mailer transport: 

Bash 

                                

                                    composer require symfony/mailgun-mailer symfony/http-client
                                
                            

Atualização dos arquivos de configuração
Assim que o transporte estiver instalado, abra o seu arquivo de configuração config/mail.php e adicione a seguinte configuração à matriz de mailers para configurar o Mailgun como um dos mailers disponíveis:

                                

                                    php rnCopy rn'mailgun' => [ rn   'transport' => 'mailgun' rn],
                                
                            

Em seguida, adicione o seguinte código ao arquivo config/services.php para configurar o Mailgun: 

                                

                                    'mailgun' => [ rn   'domain' => env('MAILGUN_DOMAIN'), rn   'secret' => env('MAILGUN_SECRET'), rn   'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), rn   'scheme' => 'https', rn], 
                                
                            

Testando a sua configuração 

Esse código garante que o seu aplicativo do Laravel tenha as credenciais e configurações necessárias para se comunicar com a API do Mailgun para enviar e-mails. 

Neste momento, a configuração necessária está concluída. Agora, você pode testar se tudo está configurado corretamente usando o Tinker

Para iniciar o ambiente do Tinker, execute o seguinte comando no seu terminal: 

Bash

                                

                                    php artisan tinker
                                
                            

Para enviar um e-mail de teste, execute o seguinte comando no terminal do Tinker: 

                                

                                    Mail::raw('This email confirms that everything was set up correctly!', function ($message) { rn   $message->to('your@email.com') rn   ->subject('Testing Laravel + Mailgun'); rn}); 
                                
                            

Certifique-se de substituir pelo seu endereço de e-mail e verifique se o endereço de e-mail foi adicionado como um destinatário autorizado. 

 Esse comando usa o método raw do Mail facade para enviar um e-mail ao endereço de e-mail fornecido. 

Agora, verifique a sua caixa de entrada para ter certeza de que você recebeu um e-mail: 

Received email

Criação de e-mails de boas-vindas 

Para simplificar o processo de envio de e-mails, o Laravel fornece classes mailable que permitem definir e estruturar o seu conteúdo de e-mail. As classes mailable facilitam a personalização do assunto, do layout e dos dados passados para a visualização do e-mail. Aqui, você criará uma classe mailable que usará para enviar um e-mail de boas-vindas para novos usuários.

Para criar a classe mailable, execute o seguinte comando no seu terminal: 

Bash 

                                

                                    php artisan make:mail WelcomeMessage
                                
                            

Esse comando cria uma classe mailable no arquivo app/Mail/WelcomeMessage.php . Na classe mailable, você precisa aceitar alguns dados que são passados quando essa classe é chamada. Você pode fazer isso por meio do método __construct. Modifique esse método conforme mostrado aqui: 

                                

                                    public function __construct( rn   protected User $user, rn) {} 
                                
                            

Em seguida, no método envelope, você pode configurar o endereço do remetente e o assunto do e-mail. Neste exemplo, você só configurará o assunto do e-mail, pois está usando um endereço de remetente global no arquivo config/mail.php. Modifique o método envelope da seguinte forma: 

                                

                                    public function envelope(): Envelope rn{ rn   return new Envelope( rn       subject: 'Welcome to Our Platform', rn   ); rn} 
                                
                            

Depois, no método content, você precisa definir a visualização que será usada para renderizar o conteúdo do e-mail e passar o nome do usuário por meio do parâmetro with. Modifique o método content assim: 

                                

                                    public function content(): Content rn{ rn   return new Content( rn       view: 'emails.welcome', rn       with: [ rn           'name' => $this->user->name, rn       ], rn   ); rn} 
                                
                            

Não se esqueça de adicionar esta declaração use ao arquivo: 

Criação do modelo de e-mail 

Agora, você precisa criar a visualização que definiu anteriormente. Crie um novo arquivo chamado emails/welcome.blade.php na pasta resources/views e adicione o seguinte conteúdo: 

HTML

                                

                                    <!DOCTYPE html> rn<html> rn    <head>               rn        <title>Welcome to Our Platform</title>               rn        <style> rn            body { rn                font-family: Arial, sans-serif; rn                background-color: #f4f4f4; rn                margin: 0; rn                padding: 20px; rn            } rnrn            .email-container { rn                background-color: #ffffff; rn                padding: 20px; rn                max-width: 600px; rn                margin: auto; rn                border-radius: 8px; rn                box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); rn            } rnrn            h1 { rn                color: #333333; rn                font-size: 24px; rn                margin-bottom: 20px; rn            } rnrn            p { rn                color: #555555; rn                font-size: 16px; rn                line-height: 1.5; rn            } rnrn            .footer { rn                margin-top: 20px; rn                font-size: 14px; rn                color: #777777; rn                text-align: center; rn            }                                           rn        </style>           rnrn    </head>       rn    <body>               rn        <div class="email-container">                       rn            <h1>Hello, {{ $name }}!</h1>                       rn            <p> rn                Thank you for signing up on our platform. We're excited to have rn                you on board.             rn            </p>                       rn            <p> rn                Feel free to explore our features, and let us know if you need rn                any assistance.             rn            </p>                       rn            <p>Best regards,<br />{{ config('app.name') }} Team</p>                       rnrn            <div class="footer">                               rn                <p> rn                    © {{ date('Y') }} {{ config('app.name') }}. All rights reserved.         rn                </p>                           rn            </div>                   rn        </div>           rn    </body> rn</html> 
                                
                            

Como implementar o e-mail de boas-vindas 

O código acima renderiza uma mensagem de boas-vindas simples com o nome do usuário. 

Em seguida, você precisa configurar o controlador que lida com o cadastro de usuários para enviar um e-mail aos novos usuários. Neste aplicativo, o controlador responsável pelo cadastro de usuários está no arquivo app/Http/Controllers/Auth/RegisteredUserController.php. Abra este arquivo e, no método store, adicione este código logo antes da declaração return

                                

                                    Mail::to($user->email)->send(new WelcomeMessage($user)); 
                                
                            

Esse código usa o Mail facade para enviar um e-mail ao usuário especificado usando a classe mailable WelcomeMessage. 

Não se esqueça de adicionar estas declarações use ao mesmo arquivo: 

Teste o aplicativo 

Agora é hora de testar se tudo está funcionando como o esperado. Para isso, execute o servidor do Laravel com o seguinte comando: 

Bash 

                                

                                    php artisan serve
                                
                            

Acesse http://localhost:8000/register no seu navegador, preencha todos os detalhes e clique no botão “REGISTER”:

Registration page

Você deverá receber um e-mail de boas-vindas na sua caixa de entrada: 

Welcome email

Isso confirma que tudo está funcionando como o esperado. 

Recursos avançados do Mailgun no Laravel

Ao integrar o Mailgun com o Laravel, você obtém acesso a recursos mais avançados que podem aprimorar os seus recursos de e-mail muito além do envio de mensagens básicas. Vamos dar uma olhada em alguns desses recursos. 

Adição de anexos aos e-mails 

O Mailgun permite que você adicione facilmente anexos aos seus e-mails, o que é um requisito comum para o envio de faturas, relatórios ou outros documentos. Você pode adicionar um anexo aos e-mails usando o método attachments na sua classe mailable: 

                                

                                    public function attachments(): array rn{ rn   return [ rn       Attachment::fromPath('/path/to/file') rn       ->as('fileName.pdf') rn       ->withMime('application/pdf'), rn   ]; rn}
                                
                            

Também é possível usar anexos in-line nos seus modelos de e-mail: 

HTML 

                                

                                    <body> rn   Sample image: rn   <img src="{{ $message->embed($pathToImage) }}" /> rn</body> 
                                
                            

Tratamento do rastreamento de e-mail com os webhooks do Mailgun 

O Mailgun oferece recursos de rastreamento de e-mail que permitem monitorar métricas importantes, como quando os usuários abrem os seus e-mails e clicam nos links anexados. Isso é útil para garantir que os seus e-mails estejam chegando à base de usuários e havendo interação. 

Para implementar o rastreamento, é preciso configurar um webhook do Mailgun e uma rota dedicada no seu aplicativo do Laravel que receberá chamadas de webhook do Mailgun. Você pode usar os dados recebidos do webhook para rastrear os e-mails enviados do seu aplicativo. 

Uso de tags 

O Mailgun é compatível com o uso de tags que ajudam a agrupar e-mails para fins de relatórios e rastreamento. É possível adicionar tags ao seu e-mail por meio do método envelope na classe mailable: 

                                

                                      public function envelope(): Envelope rn   { rn      return new Envelope( rn      subject: 'Welcome to Our Platform', rn      tags: ['welcome'], rn      ); rn   }
                                
                            

Tratamento de erros e depuração 

Ao integrar o Laravel ao Mailgun, é importante tratar os erros e depurar problemas de forma eficaz para garantir a confiabilidade. Alguns dos erros comuns que você encontrará durante o processo de integração incluem: 

  • Não autorizado: se os valores MAILGUN_DOMAIN, MAILGUN_SECRET e MAILGUN_ENDPOINT definidos no seu arquivo .env estiverem incorretos, o Mailgun não poderá autenticar as suas solicitações. Você deve verificar esses valores novamente para ter certeza de que estão corretos. 
  • Domínio não verificado: no ambiente de produção, se você tentar enviar e-mails de um domínio do Mailgun que não foi verificado, a solicitação falhará. Você precisará verificar seu domínio adicionando os registros de DNS necessários (SPF e DKIM). 
  • O domínio não tem permissão de envio: ao usar domínios de sandbox, você só pode enviar e-mails para destinatários autorizados. Ao realizar testes com um domínio de sandbox, certifique-se de que os seus destinatários estejam na lista de permissões. 

Quando ocorre um erro durante o processo de envio de e-mail, ele normalmente é registrado no arquivo de log padrão do Laravel localizado em storage/logs/laravel.log. Se você quiser registrar manualmente erros específicos relacionados ao Mailgun, coloque a lógica de envio de e-mail em um bloco try…catch para ajudar na identificação rápida de problemas: 

Além disso, o Mailgun fornece um painel intuitivo no qual é possível monitorar e solucionar problemas de entrega de e-mail. Alguns dos principais recursos do painel do Mailgun incluem:
Logs de e-mail: o Mailgun mantém logs detalhados de todas as atividades de e-mail, incluindo entregas bem-sucedidas, devoluções, aberturas, cliques e falhas. Você pode filtrar e pesquisar esses logs para identificar quaisquer entregas que falharam ou erros. 

Email logs

Mensagens de erro: para e-mails que falharam, o Mailgun registra mensagens de erro detalhadas, o que pode ajudar a entender por que um e-mail não foi entregue (como destinatários inválidos ou problemas de DNS). 

Detailed error messages

Você pode acessar esses logs e mensagens de erro na página “Logs”, que pode ser acessada em “Enviar” > “Envio” > “Logs” no painel do Mailgun. 

Solução de problemas e depuração

Quais são os problemas e soluções comuns ao enviar e-mail com o Mailgun e o Laravel? 

1. Erros de autenticação 

  • Verifique suas credenciais do Mailgun.
  • Verifique se o endpoint corresponde à sua região.

2. Verificação de domínio 

  • Certifique-se de que os registros de DNS estejam configurados corretamente.
  • Verifique as configurações de SPF e DKIM.

3. Limitações do sandbox 

  • Confirme a autorização dos destinatários.
  • Verifique os limites de envio.

Como deve ser o monitoramento de entrega? 

Acesse os logs detalhados pelo painel do Mailgun: 

  1. Acesse “Enviar” > “Envio” > “Logs”. 
  2. Analise o status de entrega.
  3. Verifique os relatórios de devolução.
  4. Monitore as métricas de engajamento. 

Quais são as práticas recomendadas para o tratamento de erros? 

Implemente o tratamento de erros adequado: 

Práticas recomendadas Para garantir a melhor entregabilidade: 

1. Separe os seus tipos de e-mail 

  • Use domínios diferentes para e-mails transacionais e de marketing.
  • Implemente a fila adequada para envios em massa.

2. Monitore as suas métricas 

  • Rastreie as taxas de devolução.
  • Monitore as reclamações de spam.
  • Analise as taxas de abertura.

3. Mantenha a higienização da lista 

  • Faça a limpeza regular de endereços inválidos.
  • Remova os assinantes não engajados.
  • Trate as devoluções de maneira adequada.

O que vem a seguir?

Você domina os conceitos básicos da integração do Laravel com o Mailgun. Tudo pronto para subir de nível? Explore: 

  • Configuração de modelos de e-mail 
  • Implementação de conteúdo dinâmico 
  • Recursos de rastreamento avançados 
  • Recursos de testes A/B 
Precisa de informações mais detalhadas? Confira nossa documentação completa da API

Pronto para enviar e-mails com confiança? Cadastre-se no Mailgun e comece a enviar.