MailHog permite atrapar el correo SMTP saliente, de modo que puedas ver el contenido sin que email se envíe realmente. Cómo instalar MailHog en diversos sistemas y usarlo para aplicaciones web PHP y proyectos 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. Podemos usarlo en muchas circunstancias, en aplicaciones PHP, Python, o con cualquier lenguaje. Por supuesto también con frameworks de todo tipo, como podría ser Symfony o Laravel para PHP o Django para Python.
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. Es un excelente método de obtener una pasarlea de envío de email en local, váñida para cualquier desarrollo con PHP. En mi caso la uso mucho Mailhog en Laravel, así que os enseñaré también a montarlo en este popular framework PHP.
Mailhog es multiplataforma
MailHog es un programa desarrollado con el lenguaje de programación Go. Es por tanto multiplataforma y lo puedes poner en funcionamiento tanto en Linux, Windows o Mac.
Una vez tengamos Go instalado en nuestro sistema operativo, lo podemos obtener a con el comando siguiente:
go get github.com/mailhog/MailHog
Una vez lo disponemos en nuestro ordenador lo podemos arrancar con el comando:
MailHog -h
Existen muchas otras maneras de instalarlo y además alternativas para que se arranque automáticamente al iniciarse el sistema. Por ejemplo, podríamos usar incluso Docker para conseguirlo. Aquí ya depende del sistema y de las preferencias de cada uno, pero existe una página en la documentación que lo explica con mayor detalle: Deploy de MailHog.
En este artículo vamos a darte más detalles sobre cómo instalarlo en Mac, que es sistema donde lo uso habitualmente. Luego verás indicaciones sobre cómo configurarlo en PHP o ya en framewoks como Laravel.
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
Este comando se encargará también de reiniciar el servicio de Mailhog cuando el ordenador arranque.
URL de MailHog
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 PHP para enviar el correo saliente a MailHog
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 Laravel aunque no uses Homestead, incluso en PHP de manera general en muchos otros ámbitos, sin necesidad de usar Laravel, 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".
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.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...