Probar los correos electrónicos en un entorno de desarrollo local puede ser un reto. Es un verdadero dolor de cabeza saber si los correos electrónicos salientes de tu sitio web o aplicación web están realmente llegando a la bandeja de entrada de los destinatarios. ¡Prueba MailHog!

MailHog es una herramienta de prueba de correo electrónico que hace que sea superfácil de instalar y configurar un servidor de correo electrónico local. MailHog configura un servidor SMTP falso. Puedes configurar tus aplicaciones web preferidas para que utilicen el servidor SMTP de MailHog para enviar y recibir correos electrónicos.

Por ejemplo, puedes configurar un sitio local de WordPress para utilizar MailHog para las entregas de correo electrónico. Eso es exactamente lo que hace DevKinsta para alimentar su servidor SMTP incorporado para probar los correos electrónicos localmente.

En este artículo, aprenderás los entresijos de MailHog, incluyendo su instalación, configuración, cómo probar los correos electrónicos localmente y mucho más.

¿Preparado para sumergirte en el tema? Vamos a sumergirnos.

¿Prefieres ver la versión en vídeo?

¿Qué es MailHog?

Interfaz web de MailHog
Interfaz web de MailHog

MailHog es una herramienta de pruebas de correo electrónico de código abierto dirigida principalmente a los desarrolladores. Te permite probar las capacidades de envío y recepción de correos electrónicos de tu aplicación web de forma más eficiente.

Construido con el lenguaje de programación Go, MailHog puede ejecutarse en múltiples sistemas operativos, incluyendo Windows, Linux, FreeBSD y macOS. MailHog es mantenido por Ian Kent y fue lanzado bajo la licencia MIT, por lo que puedes desplegarlo libremente para usos personales y comerciales.

En primer lugar, ¿por qué necesitas MailHog?

Por Qué Necesitas MailHog

MailHog resuelve muchos de los principales problemas de los tests de correo electrónico.

Digamos que estás desarrollando un sitio web de WordPress en un entorno de desarrollo local. Si quieres probar un formulario de contacto o cualquier otro correo electrónico saliente desde él, puede ser una tarea desesperante.

Normalmente, el servidor SMTP por defecto de la aplicación web se encarga de esta tarea. En un entorno de desarrollo local, casi nunca funciona debido a múltiples razones.

Puedes leer nuestra extensa guía sobre servidores SMTP gratuitos para saber más sobre cómo funciona un servidor SMTP.

Cómo funciona un servidor SMTP (Fuente: Wikimedia Commons)
Cómo funciona un servidor SMTP (Fuente: Wikimedia Commons)

En primer lugar, hay que configurar el sistema operativo, el servidor web y la aplicación web para habilitar los correos electrónicos en un entorno local. A continuación, tendrás que asegurarte de que los correos electrónicos llegan correctamente a la bandeja de entrada de tu destinatario, lo que puede acabar haciéndote perder tiempo (y espacio en la bandeja de entrada).

Y luego está la cuestión de utilizar una dirección de correo electrónico real para las pruebas. Puede perjudicar la credibilidad de tu correo electrónico privado.

MailHog resuelve todos los problemas anteriores. Configura un servidor SMTP falso que puedes configurar en tu aplicación web para enviar y recibir correos electrónicos. Incluso almacena los correos electrónicos enviados y recibidos en una ingeniosa interfaz web, para que puedas revisarlos como lo harías con una bandeja de entrada de correo electrónico real.

Por último, MailHog también te permite recuperar esos correos electrónicos con una API para realizar pruebas automatizadas. Es una característica poderosa, y el uso de la API depende de ti.

Características de MailHog

MailHog viene cargado con muchas características desde el principio. Estas son algunas de sus principales características:

  • Ligero y portátil: No es necesario instalar MailHog para utilizarlo. Es una de las principales ventajas de MailHog. Eso hace que sea altamente portátil para ejecutarlo en casi cualquier sistema operativo o servidor web.
  • Soporte de SMTP extendido: MailHog no solo soporta la configuración de un servidor SMTP falso, sino que también puedes utilizarlo para configurar un servidor ESMTP (SMTP extendido). También incluye soporte para SMTP AUTH y PIPELINING.
  • Soporte API: Puedes utilizar la API HTTP incorporada de MailHog (o la API JSON) para recuperar, listar y eliminar correos electrónicos.
  • Prueba de fallos: Puedes invitar a Jim, el Mono del Caos de MailHog (sí, se llama así), a la fiesta para que pruebe la capacidad de entrega del correo electrónico de tu aplicación web. Para ello, crea aleatoriamente problemas comunes de entrega de correo electrónico, como conexiones/autenticaciones rechazadas y conexiones de velocidad limitada.
  • Actualizaciones en tiempo real: MailHog utiliza la interfaz web EventSource para proporcionar actualizaciones instantáneas.
  • Captura y almacenamiento de correos electrónicos: Los correos electrónicos capturados pueden almacenarse en el almacenamiento de mensajes en memoria y persistir en una base de datos MongoDB y en un sistema de almacenamiento basado en archivos.
  • Descarga de archivos adjuntos: MailHog soporta la descarga de partes individuales de MIME.
  • Interfaz web: Puedes utilizar la interfaz web de MailHog para ver los correos electrónicos como texto sin formato, HTML o fuente. También soporta MIME multiparte y cabeceras codificadas.
  • Autenticación: MailHog admite la autenticación básica HTTP tanto para su interfaz web como para la API.
  • Liberar correos electrónicos capturados: Puedes configurar MailHog para liberar los correos electrónicos capturados a los servidores SMTP reales para su entrega.
Jim es el "Mono del Caos" de MailHog
Jim es el «Mono del Caos» de MailHog

Aparte de las características anteriores, MailHog dispone actualmente de dos librerías cliente para entornos PHP y NodeJS para interactuar con la API de MailHog de forma sencilla.

Implementación de MailHog en Varias Plataformas

Como hemos mencionado anteriormente, no es necesario instalar MailHog. Sin embargo, todavía tienes que descargarlo y configurarlo en tu entorno de desarrollo.

Empecemos por descargar MailHog. Luego te mostraremos cómo configurarlo en varias plataformas. Existen muchas maneras de hacerlo.

MailHog en Windows

En primer lugar, dirígete a la página de versiones de MailHog en GitHub para descargar su última versión estable para Windows. Después de descargar MailHog, puedes ejecutarlo tal cual sin ninguna dependencia externa.

Página de publicaciones de MailHog en GitHub
Página de versiones de MailHog en GitHub

Nota: En el momento de escribir este artículo, MailHog 1.0.1 es la última versión. Puedes descargarla precompilada para las plataformas Windows, Linux y Darwin (macOS). Si utilizas una plataforma de nicho, también puedes descargar su código fuente y compilarlo para tu caso de uso específico.

Como MailHog para Windows es un simple programa autoejecutable, basta con ejecutar el archivo .exe descargado. Si se te presenta alguna alerta de seguridad, asegúrate de permitir que MailHog se ejecute en tu entorno localhost sin restricciones de firewall.

Este es el aspecto de MailHog en Windows 10.

MailHog funcionando en Windows 10
MailHog funcionando en Windows 10

Puedes ver que el servidor SMTP está en el puerto 1025y el servidor HTTP está en el puerto 8025.

Todavía no es nada del otro mundo, pero es una confirmación de que MailHog se está ejecutando en tu sistema.

Ahora, puedes visitar localhost:8025 o 127.0.0.1:8025en tu navegador web para ver la interfaz web de MailHog.

MailHog Web UI en Windows
MailHog Web UI en Windows

No puedes encontrar ningún correo electrónico listado aquí todavía, ya que no hemos configurado ninguna de nuestras aplicaciones web para usar MailHog. Cubriremos eso más adelante en este artículo.

MailHog en Linux

Si usas Linux (Ubuntu/Debian), aquí tienes cómo puedes desplegar MailHog:

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

El primer comando de Linux instala el lenguaje de programación Golang en tu entorno de desarrollo (si no lo tienes ya). Puedes omitir esta línea si ya has instalado Go. El siguiente comando instala git en tu máquina (puedes saltarte esto también si ya está instalado).

El tercer comando utiliza la directiva de Go para obtener la última versión estable de MailHog desde su repositorio de GitHub.

A continuación, puedes ejecutar /path/to/MailHog a través de tu terminal para iniciar MailHog. La ruta exacta puede variar dependiendo de tu tipo de Linux. Como los archivos bin de Go en Ubuntu se almacenan en el directorio ~/go/bin/, puedes ejecutar el siguiente código para iniciar MailHog:

~/go/bin/MailHog

Eso es todo. MailHog se está ejecutando ahora en tu máquina Linux. Así es como se ve.

MailHog funcionando en Linux (Ubuntu)
MailHog funcionando en Linux (Ubuntu)

Si quieres iniciar MailHog automáticamente en cada inicio de sesión, puedes configurarlo para que se inicie como un daemom usando supervisord, upstart, etc. También puedes usar el script init o el rol Ansible proporcionado por geerlingguy para hacer lo mismo.

Al igual que en Windows, puedes ver que el servidor SMTP se inicia en el puerto 1025 y el servidor HTTP en el puerto 8025.

Visita localhost:8025 o 127.0.0.1:8025 en tu navegador web para ver la interfaz web de MailHog.

MailHog Web UI en Linux (Ubuntu)
MailHog Web UI en Linux (Ubuntu)

MailHog en macOS

Los usuarios de Apple pueden instalar MailHog utilizando Homebrew. Abre tu terminal y ejecuta el siguiente comando:

brew install mailhog

Eso instalará MailHog en tu macOS. A continuación, puedes iniciar MailHog con:

mailhog

Si deseas que MailHog se inicie automáticamente al iniciar la sesión y se ejecute como un servicio en segundo plano, puedes ejecutar el siguiente comando en su lugar:

brew services start mailhog

Eso es todo. MailHog está ahora instalado en tu macOS. Puedes ver su interfaz web visitando 127.0.0.1:8025 o localhost:8025 en tu navegador.

MailHog en Docker

Docker es una de las formas más fáciles de configurar MailHog en cualquier plataforma.

En primer lugar, asegúrate de que tienes Docker instalado en tu máquina. A continuación, puedes iniciar MailHog directamente desde Docker Hub ejecutando el siguiente comando:

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

Vamos a desglosar el comando anterior y sus directivas:

  • docker run inicia un contenedor docker.
  • -d ejecuta el contenedor docker en segundo plano.
  • Las directivas -p 1025:1025 y -p 8025:8025 exponen los puertos SMTP por defecto de MailHog a los locales.
  • mailhog/mailhog coge la última compilación de MailHog desde Docker Hub.

Alternativamente, si quieres montar el Maildir de MailHog en tu sistema de archivos local (en lugar de dentro de un contenedor Docker), puedes ejecutar el siguiente comando:

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

Al igual que antes, puedes visitar localhost:8025 o 127.0.0.1:8025 en tu navegador para utilizar la interfaz web de MailHog.

MailHog en Docker Compose

Docker Compose es una extensión de Docker que facilita la ejecución de múltiples contenedores Docker con un solo comando. Para ello, se definen todos los contenedores que se quieren ejecutar en un archivo YAML.

Por defecto, Docker Compose requiere que nombres este archivo como docker-compose.yaml.

Para ejecutar MailHog con Docker Compose, este es el aspecto que debe tener tu archivo docker-compose.yaml:

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

Dentro de la carpeta donde reside este archivo, ejecuta el siguiente comando para iniciar MailHog en segundo plano:

docker-compose up -d mailhog

Funciona exactamente igual que con Docker. Excepto que aquí, no tienes que mencionar muchas directivas, ya que las has definido.

Ahora puedes introducir localhost:8025 o 127.0.0.1:8025 en tu navegador para ver la interfaz web de MailHog.

Además de los métodos anteriores, el repositorio GitHub de MailHog también incluye una guía para implementar MailHog en AWS Elastic Beanstalk.

Configuración de MailHog con mhsendmail

MailHog redirige los correos electrónicos de las aplicaciones web a su servidor SMTP utilizando mhsendmail, un sustituto de sendmail creado específicamente para MailHog. Garantiza que los correos electrónicos de tu aplicación web se envíen y reciban utilizando el servidor SMTP localhost:1025, que MailHog está configurado para manejar por defecto.

Para empezar, necesitas descargar e instalar mhsendmail. Dependiendo de tu plataforma, puedes abordar esto de varias maneras.

Por ejemplo, si usas Ubuntu, puedes descargar mhsendmail desde tu repositorio en GitHub usando el siguiente comando:

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

A continuación, haz que este archivo sea ejecutable y muévelo a tu directorio de usuario. Para ello, utiliza el siguiente comando:

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

Alternativamente, también puedes obtener mhsendmail en Golang o Homebrew ejecutando este comando:

go install github.com/mailhog/mhsendmail

Asegúrate de que Go está instalado antes de ejecutar el comando anterior. Si estás en Linux, consulta la sección MailHog en Linux más arriba. Para instalar Go con Homebrew, ejecuta el siguiente comando:

brew install go

Una vez descargado mhsendmail, puedes proceder a su instalación:

go install github.com/mailhog/mhsendmail

A continuación, debes configurar tu aplicación web para que utilice mhsendmail de MailHog como su servicio de enrutamiento de correo electrónico. La mayoría de los sistemas Linux lo tienen configurado para usar sendmail por defecto.

Puedes hacerlo editando tu archivo php.ini. En la mayoría de los servidores, puedes encontrar el archivo php.ini en el directorio raíz. También puedes ejecutar el siguiente comando para encontrarlo:

php -i | grep 'php.ini'

Para las máquinas Linux que ejecutan Ubuntu, es necesario establecer el valor de sendmail_path a:

sendmail_path = /usr/local/bin/mhsendmail

En lugar del valor anterior, también puedes utilizar el valor que se muestra a continuación para obtener el mismo resultado:

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

Si uhas utilizado Go para instalar mhsendmail, o si estás usando cualquier otra variante de Linux, la ruta puede variar ligeramente dependiendo de tu plataforma/configuración. Asegúrate de enlazar con el directorio adecuado de mhsendmail.

Los usuarios de Mac necesitan editar su archivo de configuración de Postfix para configurar MailHog correctamente. Puedes utilizar la siguiente configuración de Postfix:

myhostname = localhost
relayhost = [127.0.0.1]:1025

En el caso de los sitios de WordPress, puedes utilizar el plugin gratuito MailHog for WordPress para dirigir los correos electrónicos de tu sitio a MailHog. Para utilizarlo, instala y activa el plugin en Tu panel de administración de WordPress. Una mejor alternativa es utilizar DevKinsta. Lo cubriremos en profundidad más adelante.

Lee la documentación de MailHog para obtener información sobre cómo configurarlo en varias otras plataformas/configuraciones.

Opciones Adicionales para la Configuración de MailHog

Puedes configurar MailHog utilizando sus diversas variables de entorno u opciones de línea de comandos.

Por ejemplo, puedes cambiar su nombre de host por defecto de mailhog.example a un nombre personalizado utilizando la variable de entorno MH_HOSTNAME o la opción de línea de comandos –hostname.

Para más información, puedes consultar la documentación sobre las opciones de configuración de MailHog.

Prueba del Correo Electrónico Localmente con MailHog

Por último, vamos a probar nuestra configuración de MailHog para ver si está bien configurada.

Puedes enviar un correo electrónico con el CLI de Mailhog utilizando las siguientes directivas mhsendmail:

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

Hey there,
Missing you pig time.

Hogs & Kisses,
Salman
EOF

En el código anterior, la directiva<<EOF establece un delimitador personalizado para que puedas introducir los detalles del correo electrónico de prueba de forma interactiva dentro del terminal. Se ejecuta toda la entrada cuando se vuelve a escribir el delimitador. Aquí, envía un correo usando el comando mhsendmail.

Envío de un correo electrónico de prueba con 'mhsendmail'
Envío de un correo electrónico de prueba con ‘mhsendmail’

Puedes comprobar si el correo electrónico se ha entregado correctamente visitando la interfaz web de MailHog.

El correo electrónico de prueba ha sido entregado con éxito
El correo electrónico de prueba ha sido entregado con éxito

También puedes hacer clic en el correo electrónico de prueba para verificar su contenido.

Verificación del contenido del cuerpo del correo electrónico de prueba
Verificación del contenido del cuerpo del correo electrónico de prueba

¡Eso es todo! Ahora podemos confirmar que MailHog ha sido configurado con éxito.

Además del método anterior, existen otras formas de enviar un correo electrónico de prueba. Por ejemplo, en macOS, puedes enviar un correo electrónico de prueba ejecutando el siguiente comando en tu terminal:

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

En Windows, puedes enviar un correo electrónico con PowerShell ejecutando el siguiente código:

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

También puedes definir un script PHP con todos los datos del correo y utilizar la función mail() de PHP para enviar un correo de prueba. Para ello, defina tu script PHP como el siguiente y ejecútalo desde la 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);
?>

Por último, puedes utilizar la API de MailHog para comprobar si un correo electrónico se ha entregado correctamente. Si trabajas exclusivamente en un entorno no-GUI (por ejemplo, terminal de Linux, PowerShell de Windows), la API de MailHog es muy útil para listar, recuperar y eliminar correos electrónicos.

DevKinsta y MailHog: Prueba del Correo Electrónico Localmente Sin Complicaciones

Nuestra herramienta de desarrollo local de WordPress, DevKinsta, utiliza MailHog para potenciar sus funciones de prueba de correo electrónico. Como también Docker para contenerizar sitios individuales, tendrás una bandeja de entrada de MailHog separada para cada sitio local que estés desarrollando.

La "Bandeja de entrada de correo electrónico" de DevKinsta es impulsada por MailHog
La «Bandeja de entrada de correo electrónico» de DevKinsta es impulsada por MailHog

Al igual que la interfaz web de MailHog, puedes utilizar la bandeja de entrada de correo electrónico local de DevKinsta para ver y manipular los correos electrónicos (eliminar, marcar como leído, ver la fuente).

Ver y manipular correos electrónicos en DevKinsta
Ver y manipular correos electrónicos en DevKinsta

También puedes comprobar los registros de MailHog de DevKinsta ejecutando el siguiente comando Docker:

docker logs -f devkinsta_mailhog

Dirígete a la sección de la base de conocimientos de DevKinsta para obtener más información.

Resumen

MailHog hace que las pruebas de correo electrónico sean muy fáciles. Es una solución estupenda y práctica para probar los correos electrónicos de tu sitio web o aplicación web. Además, MailHog es fácil de configurar en casi todas las plataformas populares y tiene una interfaz de usuario web fácil de usar.

Al igual que MailHog, DevKinsta es una gran manera de empezar con el desarrollo local de WordPress. No solo incluye MailHog para probar los correos electrónicos localmente, sino que también viene incorporado con Adminer para una fácil gestión de la base de datos.

Con MailHog (y DevKinsta) a tu lado, descubrirás que probar los correos electrónicos localmente nunca fue tan fácil.

Si quieres compartir tu experiencia o los retos que supone probar los correos electrónicos localmente, escríbenos en la sección de comentarios más abajo.

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.