Instalar y usar MailHog, en Mac. Configurar PHP

  • Por
Cómo instalar MailHog, para atrapar el correo saliente de aplicaciones web y cómo configurarlo en PHP y Laravel.

MailHog es un software libre realizado con el lenguaje de programación Go. Sirve para emular un servidor de SMTP en local, que tiene la capacidad de informar sobre todo el correo saliente que estamos realizando desde una aplicación web.

Básicamente es una aplicación que nos soluciona un típico problema en el desarrollo con PHP en local (y con cualquier otro lenguaje desde el que queramos enviar emails), donde no siempre tenemos la posibilidad de acceder a un servidor SMTP para poder enviar los mensajes. O incluso teniendo un servidor SMTP que envíe los mensajes de email desde localhost, muchas veces se quedan en el spam y no podemos acceder a ellos. Con esta alternativa los mensajes no se enviarán al destinatario, sino que quedarán en un registro interno en nuestro ordenador y podremos consultar todos sus detalles, lo que es todavía más práctico.

Existen muchas soluciones para resolver este asunto y ya hemos hablado de algunas de ellas en otras ocasiones. Incluso soluciones más sencillas como la posibilidad de tener un software que haga las veces de "FAKE" SMTP (SMPT falso).

En esta ocasión vamos a abordar otro programa similar, MailHog, que está un poco mejor, pues, una vez instalado, nos permite recuperar los correos de una manera mucho más agradecida y completa. Es un programa que podemos usar en cualquier sistema operativo, ya que el lenguaje con el que está escrito es multiplataforma.

Instalar MailHog en Mac

La verdad es que Instalar MailHog en Mac es una tarea extremadamente sencilla gracias a Homebrew. Lo conseguimos con una serie de comandos de terminal.

brew install mailhog

Una vez instalados los paquetes de MailHog en nuestro sistema, ya tenemos nuestro software disponible. Pero debemos correr el residente, encargado de arrancar MailHog para hacer las veces de servidor SMTP y ofrecernos la pasarela web para revisar el correo saliente de nuestro servidor. Esto lo conseguimos mediante este otro comando.

brew services start mailhog
Nota: Puedes encontrar otras informaciones y referencias con la fuente consultada para configurar este software en Mac, vía Homebrew: https://github.com/maijs/homebrew-mailhog

URL de MainHog

Es muy importante conocer la URL donde podemos consultar el correo saliente que se está generando desde nuestro ordenador hacia afuera.

http://127.0.0.1:8025/

Accediendo a esa dirección web podrás ver la lista de correos electrónicos que han salido recientemente, con la posibilidad de acceder al detalle de cada mensaje. La interfaz de esta página web para la consulta del email saliente es la siguiente:

El detalle de un email capturado con MailHog, donde podemos ver el remitente, asunto, destinatario, cabeceras, etc. es el siguiente:

Configurar MailHog para el correo saliente en PHP

Si estuviéramos usando Windows, sería muy sencillo configurar el SMTP para PHP, gracias a la configuración del php.ini en las variables "SMTP" y "SMTP_port". Sin embargo, el proceso no es que sea difícil en Mac, sino algo menos intuitivo.

Básicamente necesitamos configurar Postfix, un servidor de correo saliente que puede servir en Mac para enrutar y enviar mensajes de email. Tenemos que abrir el archivo de configuración de Postfix en el terminal:

sudo nano /etc/postfix/main.cf

Al final de ese archivo colocaremos las siguientes líneas extra:

# Para MailHog
myhostname = localhost
relayhost = [localhost]:1025

A continuación tenemos que iniciar Postfix con este comando:

sudo postfix start

Podría ser que Postfix ya estuviera iniciado, en cuyo caso hace falta reiniciarlo, para lo que procederíamos con este otro comando:

sudo postfix stop && sudo postfix start

Una vez realizada esta configuración, podrás enviar email desde PHP.

Configuración opcional de Postfix para Mamp Pro

Mamp Pro ofrece una interfaz para configurar si deseamos que Postfix se arranque cuando arranquemos los servicios (al iniciar el servidor web y la base de datos). Nos puede ser útil para evitar comandos de arranque de postfix más adelante, cuando se reinicie el equipo.

Simplemente accedes a la opción Postfix, en el menú de la izquierda, y luego configuras el formulario de la siguiente manera:

  • Marcas que se incluya este servicio en el "GroupStart".
  • Proporciona un nombre de dominio para el correo saliente (te lo puedes inventar).
  • Marca la opción "Use a Smart host for routing"
  • Coloca el nombre del servidor como 127.0.0.1:25

Configurar MailHog en Laravel

Conocí MailHog por ser uno de los programas que vienen por defecto instalados en una máquina virtual "Homestead", para desarrollo de aplicaciones web con Laravel. Sin embargo, puedes usar MailHog en muchos otros ámbitos, como hemos descrito anteriormente. Si eres usuario de Homestead en Laravel no necesitas hacer nada en especial para que MailHog atrape tu email saliente, sin embargo, si no usas Homestead tendrás que poner una pequeña configuración en el archivo ".env".
Nota: El paso de configurar Postfix en Mac, si estás enviando emails desde Laravel, te lo puedes saltar, pues no se usa en este caso.

Editas el .env (situado en la raíz del proyecto Laravel) para que te queden estas variables de configuración del correo saliente:

MAIL_DRIVER=smtp
MAIL_HOST=0.0.0.0
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

Eso es todo!

Conclusión

Hemos conocido MailHog en este artículo. Lo hemos aprendido a instalar en Mac solamente, aunque me figuro que para Windows o Linux no será nada demasiado diferente gracias a sus gestores de paquetes.

Luego hemos aprendido a configurar PHP para que el correo saliente se pueda atrapar en MailHog y hemos conocido la configuración concreta que necesitamos para un proyecto Laravel.