• Twitter
  • GitHub
  • Flickr
  • Skype
  • Stack Overflow em Português

Blog

Método de reutilização de código – Traits: Hey, pessoal! Quero deixar aqui arquivado algo que venho utilizando muito, os Traits. Nada de novo, e algo que o PHP começou...

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!