Blog
Envio e teste de e-mails em ambiente de desenvolvimento com Mailhog e MhSendmail
Olá!
Estou de volta para demonstrar como podemos emular em nosso ambiente de desenvolvimento um recurso para envio e teste de e-mail. Algo que nos ajude a minimizar testes diretamente para nossos clientes ou usuários, evitando também usar algo fora do ambiente local, que possa levar uma conta de e-mail cair numa blacklist de SPAM, situação nada legal. Para isso, iremos utilizar o Mailhog que é um software de código aberto desenvolvido em Go, que tem como principal serviço capturar todos os seus emails de saída, colocá-los em memória e exibi-los por meio de uma interface web no browser.
Características
- Servidor ESMTP implementando RFC5321
- Suporte para SMTP AUTH (RFC4954) e PIPELINING (RFC2920)
- Interface Web para visualizar mensagens (texto simples, HTML ou fonte)
Suporta cabeçalhos codificados RFC2047 - Atualizações em tempo real usando EventSource
- Liberar mensagens para servidores SMTP reais
- Chaos Monkey(Macaco do Caos) para teste de falha
Veja Introdução a Jim para mais informações - API HTTP para listar, recuperar e excluir mensagens
Consulte a documentação APIv1 e APIv2 para obter mais informações - Autenticação básica HTTP para UI e API do MailHog
- Suporte MIME Multipart
- Baixe peças MIME individuais
- Armazenamento de mensagens na memória
- MongoDB e armazenamento baseado em arquivos para persistência de mensagens
- Leve e portátil
Mhsendmail no lugar do Sendmail
Para que possamos utilizar os recursos num sistema desenvolvido em PHP ou outro tipo de sistema, iremos utilizar o mhsendmail que é um substituto do sendmail para o MailHog, que encaminha correio para um servidor SMTP.
Vamos começar...
Download e instalação do MailHog
Aqui neste link, há uma lista com arquivos para instalação, das últimas versões e tipo de ambiente. Para meu ambiente de desenvolvimento, utilizo a arquitetura sistema Linux em amd64. Portanto o arquivo será o MailHog_linux_amd64
~$ cd ~/ ~$ wget https://github.com/mailhog/MailHog/releases/download/v1.0.0/MailHog_linux_amd64 ~$ sudo cp MailHog_linux_amd64 /usr/bin/mailhog ~$ sudo chmod +x /usr/bin/mailhog
Instalação do Mhsendmail no lugar do Sendmail
Em relação à arquitetura, segue a mesma, então o arquivo será o mhsendmail_linux_amd64, encontrado em: mhsendmail/releases
~$ cd ~/ ~$ wget https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mhsendmail_linux_amd64 ~$ ~$ sudo ln mhsendmail_linux_amd64 /usr/bin/mhsendmail ~$ sudo ln mhsendmail_linux_amd64 /usr/bin/sendmail ~$ sudo ln mhsendmail_linux_amd64 /usr/bin/mail ~$ ~$ cd /usr/bin ~$ sudo chmod +x mhsendmail sendmail mail
Executando o MailHog
~$ /usr/bin/mailhog ~$ 2017/12/13 22:26:29 Using in-memory storage ~$ 2017/12/13 22:26:29 [SMTP] Binding to address: 0.0.0.0:1025 ~$ [HTTP] Binding to address: 0.0.0.0:8025 ~$ 2017/12/13 22:26:29 Serving under http://0.0.0.0:8025/ ~$ Creating...
Abra o navegador e veja a interface: http://localhost:8025
Agora vamos testar o envio de e-mail com o mhsendmail, veja:
~$ /usr/bin/mhsendmail test@mailhog.local <<EOF > From: App <app@mailhog.local> > To: Teste <teste@mailhog.local> > Subject: Mensagem de teste > > Conteúdo do corpo do e-mail! > EOF
Veja! Temos algo em: http://localhost:8025
Para aplicações desenvolvidas em PHP, podemos configurar o php.ini e usar o comando nativo do sendmail usando -S, por exemplo:
~$ /usr/sbin/sendmail -S mail:1025
Dependendo das configurações do seu ambiente de desenvolvimento,você pode adicionar qualquer uma dessas linhas para php.ini:
sendmail_path = /usr/bin/mhsendmail
sendmail_path = /usr/sbin/sendmail -S mail:1025
~$ echo 'sendmail_path = /usr/bin/mhsendmail --smtp-addr mailhog:1025' > /usr/local/etc/php/php.ini
That's all folks! ㋡