Testar e-mails em um ambiente de desenvolvimento local pode ser um desafio. É uma verdadeira dor saber se os e-mails enviados pelo seu site ou pelo aplicativo web estão realmente chegando à caixa de entrada do destinatário. Entre, MailHog!

MailHog é uma ferramenta de teste de e-mail que torna super fácil a instalação e configuração de um servidor de e-mail local. MailHog monta um servidor SMTP falso. Você pode configurar suas aplicações web preferidas para usar o servidor SMTP do MailHog para enviar e receber e-mails.

Por exemplo, você pode configurar um site WordPress local para usar o MailHog para entrega de e-mails. É exatamente isso que a DevKinsta faz para alimentar seu servidor SMTP embutido para testar e-mails localmente.

Neste artigo, você aprenderá as entradas e saídas do MailHog, incluindo sua instalação, configuração, como testar e-mails localmente, e muito mais!

Pronto para mergulhar? Vamos lá!

Prefere assistir à versão em vídeo?

O que é MailHog?

MailHog Web UI
MailHog Web UI

MailHog é uma ferramenta de teste de e-mail de código aberto destinada principalmente aos desenvolvedores. Ela permite que você teste as capacidades de envio e recebimento de e-mails de seu aplicativo web de forma mais eficiente.

Construído com a linguagem de programação Go, MailHog pode ser executado em múltiplos sistemas operacionais, incluindo Windows, Linux, FreeBSD e macOS. O MailHog é mantido por Ian Kent e liberado sob a licença do MIT, para que você possa implementá-lo livremente para usos pessoais e comerciais.

Mas por que você precisa sequer do MailHog em primeiro lugar?

Por que você precisa do MailHog

MailHog resolve muitos dos principais problemas dos testes de e-mail.

Digamos que você esteja desenvolvendo um site WordPress em um ambiente de desenvolvimento local. Se você quiser testar um formulário de contato ou qualquer outro e-mail enviado a partir dele, pode ser uma tarefa difícil.

Tipicamente, o servidor SMTP padrão da aplicação web cuida desta tarefa. Em um ambiente de desenvolvimento local, ele quase sempre nunca funciona devido a múltiplas razões.

Você pode ler nosso extenso guia sobre servidores SMTP gratuitos para saber mais sobre como funciona um servidor SMTP.

Como funciona um servidor SMTP (Fonte: Wikimedia Commons)
Como funciona um servidor SMTP (Fonte: Wikimedia Commons)

Primeiro, você precisa configurar seu sistema operacional, webserver e aplicativo web para habilitar e-mails em um ambiente local. Então você terá que se certificar de que os e-mails cheguem com sucesso na caixa de entrada de seu destinatário, o que pode acabar desperdiçando seu tempo (e espaço na caixa de entrada).

E depois há a questão do uso de um endereço de e-mail real para testes. Isso pode prejudicar a credibilidade de seu e-mail particular.

MailHog resolve todas as questões acima. Ele configura um falso servidor SMTP que você pode configurar sua aplicação web para enviar e receber e-mails. Ele até mesmo armazena os e-mails enviados e recebidos em uma sofisticada interface web, para que você possa analisá-los como se estivesse com uma caixa de entrada de e-mail real.

Finalmente, o MaiilHog também permite que você recupere esses e-mails com um API para testes automatizados. É um recurso poderoso, e como você usa o API depende de você.

Características do MailHog

MailHog vem equipado com muitas características out-of-the-box. Aqui estão alguns de seus principais destaques:

  • Leve e Portátil: Você não precisa instalar o MailHog para usá-lo. É uma das maiores vantagens do MailHog. Isso o torna altamente portátil para rodá-lo em quase qualquer sistema operacional ou servidor web.
  • Suporte SMTP ampliado: O MailHog não apenas suporta a configuração de um servidor SMTP falso, mas também pode usá-lo para configurar um servidor ESMTP (SMTP Estendido). Ele também inclui suporte para SMTP AUTH e PIPELINING.
  • Suporte API: Você pode usar a API HTTP embutida do MailHog (ou JSON API) para recuperar, listar e excluir e-mails.
  • Teste de falhas: Você pode convidar Jim, MailHog’s Chaos Monkey (sim, na verdade é chamado assim), para a festa para testar a entregabilidade de seu aplicativo web de e-mail. Ele faz isso criando aleatoriamente problemas comuns de entregabilidade de e-mails, tais como conexões/autenticações rejeitadas e conexões com taxas limitadas.
  • Atualizações em tempo real: MailHog utiliza a interface web EventSource para fornecer atualizações instantâneas.
  • Captura e armazenamento de e-mails: Os e-mails capturados podem ser armazenados no armazenamento de mensagens in-memory e persistir em um banco de dados MongoDB e em um sistema de armazenamento baseado em arquivos.
  • Download de anexos: MailHog suporta o download de peças individuais MIME.
  • Web UI: Você pode usar a interface Web do MailHog para visualizar e-mails como texto simples, HTML, ou fonte. Também suporta multipart MIME e cabeçalhos codificados.
  • Autenticação: MailHog suporta autenticação básica HTTP tanto para sua interface Web UI quanto API.
  • Liberação de e-mails capturados: Você pode configurar o MailHog para liberar os e-mails capturados para servidores SMTP reais para entrega.
Jim é o "Macaco do Caos" do MailHog
Jim é o “Macaco do Caos” do MailHog

Além das características acima, o MailHog possui atualmente duas bibliotecas clientes para ambientes PHP e NodeJS para interagir facilmente com a API do MailHog.

Implantação do MailHog em várias plataformas

Como mencionado anteriormente, o MailHog não precisa ser instalado. No entanto, você ainda precisa baixá-lo e configurá-lo em seu ambiente de desenvolvimento.

Vamos começar com o download do MailHog. Depois mostraremos como configurá-lo em várias plataformas. Há muitas maneiras de você fazer isso.

MailHog no Windows

Primeiro, vá para a página de lançamentos do MailHog no GitHub para baixar sua última versão estável para Windows. Depois de baixar o MailHog, você pode executá-lo como está sem nenhuma dependência externa.

Página de lançamentos do MailHog GitHub
Página de lançamentos do MailHog GitHub

Nota: Desde a redação deste artigo, MailHog 1.0.1 é a última versão lançada. Você pode baixá-lo pré-compilado para as plataformas Windows, Linux e Darwin (macOS). Se você estiver usando uma plataforma de nicho, você também pode baixar seu código fonte e compilá-lo para seu caso específico de uso.

Como MailHog for Windows é um programa simples e autoexecutável, você pode simplesmente executar o arquivo .exe baixado. Se você receber qualquer alerta de segurança, certifique-se de permitir que o MailHog seja executado em seu ambiente local sem restrições de firewall.

Veja como fica o MailHog no Windows 10.

MailHog rodando no Windows 10
MailHog rodando no Windows 10

Você pode ver que o servidor SMTP está na porta 1025 e o servidor HTTP está na porta 8025.

Nada muito extravagante ainda, mas é uma confirmação de que o MailHog está funcionando em seu sistema.

Agora, você pode visitar o localhost:8025 ou 127.0.0.1:8025 em seu navegador da web para ver a MailHog Web UI.

MailHog Web UI no Windows
MailHog Web UI no Windows

Você ainda não encontrou nenhum e-mail listado aqui, pois não configuramos nenhuma de nossas aplicações web para usar o MailHog. Cobriremos isso mais tarde neste artigo.

MailHog no Linux

Se você estiver usando Linux (Ubuntu/Debian), eis como você pode implantar o MailHog:

sudo apt-get -y install golang-go
sudo apt-get install git
go install github.com/mailhog/MailHog

O primeiro comando Linux instala a linguagem de programação Golang em seu ambiente de desenvolvimento (se você ainda não a tem). Você pode pular esta linha se você já tiver instalado o Go. O próximo comando instala o git em sua máquina (você pode pular isto também se ela já estiver instalada).

O terceiro comando usa a diretiva Go para obter o último lançamento estável do MailHog a partir de seu repositório GitHub.

A seguir, você pode executar /path/to/MailHog através de seu terminal para iniciar o MailHog. O caminho exato pode variar dependendo do seu sabor de Linux. Como os arquivos de bin do Go no Ubuntu são armazenados sob o diretório ~/go/bin/, você pode rodar o código abaixo para iniciar o MailHog:

~/go/bin/MailHog

É mais ou menos isso. O MailHog está agora rodando em sua máquina Linux. Este é o aspecto.

MailHog rodando no Linux (Ubuntu)
MailHog rodando no Linux (Ubuntu)

Se você quiser iniciar o MailHog automaticamente em cada login, você pode configurá-lo para começar como um daemon servindo usando o supervisor, upstart, etc. Você também pode usar o init script ou o papel de Ansible fornecido pelo geerlingguy para fazer o mesmo.

Assim como no Windows, você pode ver que o servidor SMTP inicia na porta 1025 e o servidor HTTP inicia na porta 8025.

Visite localhost:8025 ou 127.0.0.1:8025 em seu navegador da web para ver a MailHog Web UI.

MailHog Web UI no Linux (Ubuntu)
MailHog Web UI no Linux (Ubuntu)

MailHog no MacOS

Os usuários da Apple podem instalar o MailHog usando o Homebrew. Abra seu terminal e execute o seguinte comando:

brew install mailhog

Isso vai instalar o MailHog em seu macOS. A seguir, você pode iniciar o MailHog com:

mailhog

Se você quiser que o MailHog seja lançado automaticamente no login e executado como um serviço em segundo plano, você pode executar o seguinte comando em seu lugar:

brew services start mailhog

É mais ou menos isso. MailHog está agora instalado em seu macOS. Você pode visualizar sua interface Web visitando 127.0.0.1:8025 ou localhost:8025 em seu navegador.

MailHog no Docker

Docker é uma das formas mais fáceis de configurar o MailHog em qualquer plataforma.

Primeiro, certifique-se de ter o Docker instalado em sua máquina. Em seguida, você pode iniciar o MailHog diretamente do Docker Hub, executando o seguinte comando:

docker run -d -p 1025:1025 -p 8025:8025 mailhog/mailhog

Vamos quebrar o comando acima e suas diretrizes:

  • docker run inicia um contêiner portuário.
  • -d dirige o contêiner portuário ao fundo.
  • As diretrizes -p 1025:1025 e -p 8025:8025 expõem as portas padrão SMTP do MailHog às suas portas locais.
  • mailhog/mailhog pega o último MailHog construído pelo Docker Hub.

Alternativamente, se você quiser montar o MailHog’s Maildir em seu sistema de arquivos local (ao invés de dentro de um container Docker), você pode executar o seguinte comando:

docker run -d -e "MH_STORAGE=maildir" -v $PWD/maildir:/maildir -p 1025:1025 -p 8025:8025 mailhog/mailhog

Como antes, você pode visitar o localhost:8025 ou 127.0.0.1:8025 em seu navegador para usar o MailHog Web UI.

MailHog no Docker Compose

Docker Compose é uma extensão do Docker que facilita o funcionamento de vários containers Docker com um único comando. Você faz isto definindo todos os containers que deseja executar em um arquivo YAML.

Por padrão, Docker Compose exige que você nomeie este arquivo como docker-compose.yaml.

Para executar MailHog com Docker Compose, eis como deve ficar seu arquivo docker-compose.yaml

version: "3"
services:
  mailhog:
    image: mailhog/mailhog:latest
    restart: always
    ports:
      - 1025:1025
      - 8025:8025

Dentro da pasta onde reside este arquivo, execute o seguinte comando para iniciar o MailHog em segundo plano:

docker-compose up -d mailhog

Funciona exatamente como com o Docker. Exceto aqui, você não precisa mencionar muitas diretrizes como você já as definiu.

Agora você pode digitar localhost:8025 ou 127.0.0.1:8025 em seu navegador para visualizar a MailHog Web UI.

Além dos métodos acima, o reporte GitHub do MailHog também inclui um guia para a implantação do MailHog no AWS Elastic Beanstalk.

Configuração do MailHog com mhsendmail

MailHog redireciona e-mails de aplicativos web para seu servidor SMTP usando o mhsendmail, um substituto do sendmail criado especificamente para MailHog. Ele garante que os e-mails de seu aplicativo web sejam enviados e recebidos usando o servidor SMTP localhost:1025, que o MailHog está configurado para lidar por padrão.

Para começar, você precisa baixar e instalar o mhsendmail. Dependendo de sua plataforma, você pode abordar isto de várias maneiras.

Por exemplo, se você estiver usando o Ubuntu, você pode baixar o mhsendmail de seu repositório GitHub usando o seguinte comando:

wget https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mhsendmail_linux_amd64

Em seguida, torne este arquivo executável e mova-o para seu diretório de usuários. Para fazer isso, use o seguinte comando:

sudo chmod +x mhsendmail_linux_amd64
sudo mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail

Alternativamente, você também pode obter mhsendmail em Golang ou Homebrew executando este comando:

go install github.com/mailhog/mhsendmail

Certifique-se de que o Go está instalado antes de executar o comando acima. Se você estiver no Linux, consulte a seção MailHog no Linux acima. Para instalar o Go com Homebrew, execute o seguinte comando:

brew install go

Com o mhsendmail baixado, você pode agora prosseguir com a instalação:

go install github.com/mailhog/mhsendmail

A seguir, você precisa configurar seu aplicativo web para usar o mhsendmail do MailHog como seu serviço de roteamento de e-mail. A maioria dos sistemas Linux têm-no configurado para usar o sendmail or padrão.

Você pode fazer isso editando seu arquivo php.ini. Na maioria dos servidores, você pode encontrar o arquivo php.ini no diretório raiz. Você também pode executar o seguinte comando para encontrar onde ele está:

php -i | grep 'php.ini'

Para máquinas Linux rodando Ubuntu, você precisa definir o valor do sendmail_path para:

sendmail_path = /usr/local/bin/mhsendmail

Ao invés do valor acima, você também pode usar o valor mostrado abaixo para obter o mesmo resultado:

sendmail_path = /usr/sbin/sendmail -S mail:1025

Se você usou Go para instalar o mhsendmail, ou se você estiver usando qualquer outra variante do Linux, o caminho pode variar ligeiramente dependendo de sua plataforma/configuração. Certifique-se de fazer o link para o diretório apropriado do mhsendmail.

Os usuários de Mac precisam editar seu arquivo de configuração Postfix para configurar corretamente o MailHog. Você pode usar a seguinte configuração do Postfix:

myhostname = localhost
relayhost = [127.0.0.1]:1025

Para sites WordPress, você pode usar o plugin gratuito MailHog para WordPress para encaminhar os e-mails de seu site para o MailHog. Para utilizá-lo, instale e ative o plugin em seu painel de administração do WordPress. Uma alternativa melhor é usar o DevKinsta. Cobriremos isso em profundidade mais tarde.

Leia a documentação do MailHog para obter informações sobre como instalá-lo em várias outras plataformas/configurações.

Opções adicionais de configuração do MailHog

Você pode configurar o MailHog usando suas várias variáveis de ambiente ou opções de linha de comando.

Por exemplo, você pode mudar seu hostname padrão de mailhog.example para um nome personalizado usando a variável de ambiente MH_HOSTNAME ou a opção de linha de comando –hostname.

Para mais informações, você pode verificar a documentação das opções de configuração do MailHog.

Teste local de e-mail com MailHog

Finalmente, vamos testar nossa configuração do MailHog para ver se ele está configurado corretamente.

Você pode enviar um e-mail com o CLI do Mailhog utilizando as seguintes diretrizes do mhsendmail:

mhsendmail [email protected] <
To: Test <[email protected]>
Subject: Hello, MailHog!

Hey there,
Missing you big time.

Hogs & Kisses,
Salman
EOF

No código acima, a diretiva <<EOF estabelece um delimitador personalizado para que você possa inserir os detalhes do e-mail de teste interativamente dentro do terminal. Ela executa toda a entrada quando você digita o delimitador novamente. Aqui, ele envia um e-mail usando o comando mhsendmail.

Enviando um e-mail de teste usando o 'mhsendmail'.
Enviando um e-mail de teste usando o ‘mhsendmail’.

Você pode verificar se o e-mail foi entregue com sucesso visitando a MailHog Web UI.

O e-mail de teste foi entregue com sucesso
O e-mail de teste foi entregue com sucesso

Você também pode clicar no e-mail de teste para verificar seu conteúdo corporal.

Verificação do conteúdo corporal do e-mail de teste
Verificação do conteúdo corporal do e-mail de teste

Isso é um embrulho! Podemos agora concluir que o MailHog foi configurado com sucesso.

Além do método acima, há outras formas de enviar um e-mail de teste. Por exemplo, em macOS, você pode enviar um e-mail de teste executando o seguinte comando em seu terminal:

date | mail -s "Hello, MailHog!" [email protected]

No Windows, você pode enviar um e-mail com PowerShell executando o seguinte código:

Send-MailMessage -To "[email protected]" -From "[email protected]" -Subject "Hello, MailHog!" -SmtpServer "localhost" -Port 1025

Você também pode definir um script PHP com todos os dados de e-mail e usar a função PHP mail() para enviar um e-mail de teste. Para fazer isso, defina seu script PHP como abaixo e execute-o a partir do terminal:

<?php
$to = "[email protected]";
$subject = "Hey, I’m Pi Hog Pi!";
$body = "Hello, MailHog!";
$headers = "From: [email protected]" . "\r\n";
mail($to,$subject,$body,$headers);
?>

Finalmente, você pode usar o MailHog API para testar se um e-mail foi entregue com sucesso. Se você estiver trabalhando exclusivamente em um ambiente não-GUI (por exemplo, terminal Linux, Windows PowerShell), a MailHog API é super útil para listar, recuperar e excluir e-mails.

DevKinsta e MailHog: Teste de e-mail local sem complicação

Nossa ferramenta local de desenvolvimento WordPress, DevKinsta, utiliza o MailHog para potencializar seus recursos de teste de e-mail. Como também o Docker para conter sites individuais, você terá uma caixa de entrada MailHog separada para cada site local que você estiver desenvolvendo.

A 'Caixa de entrada de e-mail' da DevKinsta é alimentada pelo MailHog
A ‘Caixa de entrada de e-mail’ da DevKinsta é alimentada pelo MailHog

Como a MailHog Web UI, você pode usar a caixa de entrada de e-mail local da DevKinsta para visualizar e manipular e-mails (excluir, marcar como lido, ver fonte).

Visualizar e manipular e-mails no DevKinsta
Visualizar e manipular e-mails no DevKinsta

Você também pode verificar os logs do DevKinsta MailHog executando o seguinte comando Docker:

docker logs -f devkinsta_mailhog

Dirija-se à seção de base de conhecimento da DevKinsta para obter mais informações.

Resumo

MailHog faz dos testes de e-mail uma brisa. É uma ótima e prática solução para testar os e-mails do seu site ou aplicativo web. Além disso, MailHog é simples de instalar em quase todas as plataformas populares e tem uma interface Web fácil de usar.

Como o MailHog, DevKinsta é uma ótima maneira de começar com o desenvolvimento local do WordPress. Não só inclui o MailHog para testar e-mails localmente, mas também vem pré-carregado com Adminer para facilitar o gerenciamento do banco de dados.

Com o MailHog (e DevKinsta) do seu lado, você descobrirá que testar e-mails localmente nunca foi tão fácil.

Se você quiser compartilhar sua experiência ou desafios com e-mails de teste localmente, por favor, deixe-nos uma linha na seção de comentários abaixo.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.