MailHog y cómo probar correos electrónicos en desarrollo

MailHog permite a los desarrolladores hacer pruebas de envío de correo electrónico a través de un SMTP falso y ver cómo quedan los emails a través de su sencilla interfaz web.
MailHog y cómo probar correos electrónicos en desarrollo

Una de las partes más comunes que los desarrolladores tenemos que hacer es enviar correos electrónicos al usuario: cuando se completa el registro, cuando responden a un hilo que te interesa o cuando hay alguna notificación. Esto puede llegar a ser un dolor de cabeza porque generalmente tienes que hacer varias pruebas, los servidores de correo te pueden calificar como SPAM al intentar enviar varias veces el mismo, etc.

¿Sabías que hay una forma más pro de enviar correos electrónicos en un entorno local o de pruebas sin necesitar una cuenta de correo real? En este artículo te voy a enseñar qué es MailHog y por qué deberías usarlo para pruebas de email en tu próximo proyecto.

Pero antes de eso, vamos a repasar un poco de teoría, para que entiendas cómo funciona MailHog y por qué te puede ahorrar muchos problemas a la hora de hacer pruebas de envío de email y cómo quedan tus plantillas.

Qué es un servidor SMTP

Desde hace muchos años, existen dos protocolos básicos que usamos los usuarios para leer y recibir correo electrónico. Por un lado, el IMAP (o POP3 si eres un poco viejuno) permite conectarse con tu buzón de correo y descargar tus mensajes. Por el otro lado, el SMTP (que no ha cambiado mucho a lo largo de los años) permite que tú envíes un correo electrónico a otros usuarios.

Cuando tu terminas de redactar un correo electrónico y le das a enviar, lo que está pasando por detrás es que estás haciendo una conexión al servidor SMTP de tu proveedor de correo y le estás diciendo quién eres, cuál es tu cuenta y contraseña, a quién quieres enviar el correo y algunos datos más. Si el usuario/contraseña es correcta y no hay errores en el mensaje, el servidor SMTP acepta el encargo y se encargará de hacerle llegar ese correo al usuario destinatario. Realmente quién se encarga de enviar el correo es el servidor de SMTP, no tú.

Es por esto que a veces, a las horas de enviar un correo, te viene devuelto con un error que indica que no se ha podido enviar. Esto se debe a que el servidor SMTP ha estado intentándolo un par de horas pero finalmente no ha podido.

Cuando configuramos una aplicación para que envíe correos, el panorama no ha cambiado mucho: en vez de componerlos nosotros y darle al botón de enviar, se lo estamos delegando a un software automatizado. Este software se encarga de componer el mensaje y enviarlo al servidor SMTP que hayamos configurado.

Y es aquí cuando empiezan a aparecer los posibles problemas y contratiempos para el desarrollador que quiere que su sistema mande correos automáticos.

  • En primer lugar, necesitamos tener conexión a Internet para enviar correos electrónicos reales. Eso significa que si teletrabajas desde el bosque vas a tener problemas de cobertura.

  • En algunas plataformas como Gmail, no vale con meter usuario y contraseña para comenzar a enviar correos. Tienes que generar un token y generalmente activar una serie de mecanismos de seguridad que pueden resultar molestos (y muy trabajosos).

  • Necesitas usar una cuenta real (personal o de trabajo). Eso significa que si envías muchos correos de prueba, tu SMTP y/o el servidor del destinatario pueden pensar que estás un poco pesado: SPAM temporal.

  • Si las pruebas no quedan bien o metes contenido que pueda resultar sospechoso, tu cuenta puede caer en SPAM durante mucho mucho tiempo.

Pasan muchas cosas cuando envías un email a través de tu sistema. ¿Verdad que estaría bien que existiera un entorno de pruebas para simplificar este proceso? Exacto, aquí entra en escena MailHog. MailHog se encargará de simplificar el envío de emails con un servidor SMTP falso.

Qué es MailHog y por qué te interesa en el desarrollo

Ya sabes cómo funciona el envío real de un correo electrónico, ya sea desde un cliente de correo o desde un sistema automatizado. Aquí es donde entra en juego MailHog para hacerte la vida más fácil.

MailHog, en pocas palabras, es una herramienta que sirve para hacer pruebas de entregabilidad de correos electrónicos y para "ver cómo quedan los emails" cuando los envías. Internamente, crea un servidor de SMTP falso (indistinguible de uno de verdad a primera vista) para que tus aplicaciones puedan enviar el email pensando que es un servidor SMTP normal. Cuando detecta que está entrando un mensaje de correo electrónico, lo captura y no lo envía (como haría un SMTP real).

Luego, cuando subas tu aplicación a producción, bastará con cambiar los parámetros de conexión con el servidor SMTP real y no hará falta tocar el código de tu aplicación.

MailHog tiene una interfaz web que muestra los mensajes de correo que han ido entrando como si fuese una aplicación de correo electrónico normal. De esta forma, puedes ver qué mensajes han entrado, quién es el remitente y el destinatario y ver cómo queda la plantilla del correo electrónico (si se ve bien, el HTML funciona, etc.). La interfaz web se va actualizando en tiempo real, lo que permite que no tengas que preocuparte por refrescar constantemente.

La principal ventaja que nos ofrece MailHog es que no tenemos que lidiar con los problemas de la capa de red ni con los problemas de SPAM que puede generar el uso de un servidor real. Sin embargo, tiene otras ventajas añadidas, como por ejemplo, que está disponible sin conexión a Internet, por lo que ya puedes irte a teletrabajar al bosque. Además, se puede instalar en casi cualquier sistema operativo y no ocupa mucho espacio.

Por último, y para ser un buen desarrollador, MailHog tiene un as escondido bajo la manga: Jim, el mono del caos. Bajo este cómico nombre se encuentra una funcionalidad muy útil para el desarrollador: probar cómo se comporta tu aplicación cuando el servidor de correos electrónicos da problemas. Cuando activas al mono Jim, de forma aleatoria, MailHog genera problemas comunes de entrega, como conexiones rechazadas o límite de velocidad. De esta manera, puedes probar si tu código soporta el fallo en el envío sin tener que cortar el cable de Internet.

Cómo instalar MailHog y cómo ponerlo en marcha

Si ya te he convencido de usar MailHog para el envío de correos electrónicos en un entorno de pruebas, el siguiente paso es ver cómo se instala. Tienes toda la documentación de cómo instalar MailHog en diferentes plataformas. Por comodidad y sencillez, en este artículo vamos a utilizar la versión de docker. Con tan solo lanzar este comando, tendremos levantada una instancia de MailHog en nuestro equipo:

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

Cuando lo uses con otro proyecto que tengas en docker, asegúrate de que el contenedor de tu aplicación y el contenedor de MailHog están en la misma red, para que puedan conectarse correctamente.

MailHog permite muchas funcionalidades extra, como por ejemplo requerir usuario y contraseña, enviar realmente los correos electrónicos a un SMTP real o guardar los correos electrónicos que recibe en una base de datos para asegurar la persistencia. Revista el documento de configuración a través de las variables de entorno para saber más.

$ docker run -p 1025:1025 -p 8025:8025 mailhog/mailhog
2022/10/06 10:37:59 Using in-memory storage
2022/10/06 10:37:59 [SMTP] Binding to address: 0.0.0.0:1025
[HTTP] Binding to address: 0.0.0.0:8025
2022/10/06 10:37:59 Serving under http://0.0.0.0:8025/
Creating API v1 with WebPath: 
Creating API v2 with WebPath: 

Ahora que ya tenemos MailHog funcionando, podemos configurar nuestra aplicación para que envíe correos electrónicos a través de este SMTP. Deberás configurar tu aplicación para que use "localhost:1025" si estas en tu local o el nombre del contenedor si estás en docker: "mailhog:1025".

No olvides abrir la interfaz de usuario a través de tu navegador en localhost:8025. Verás una ventana increíblemente sencilla donde irán apareciendo los correos electrónicos a medida que MailHog los vaya recibiendo. También podrás activar al mono Jim para probar si tu aplicación es tolerante a fallos.

Interfaz web de MailHog

Conclusión

Hasta que descubrí MailHog, yo también tenía configurada mi cuenta de Gmail para hacer las pruebas de envío de correos electrónicos y ver cómo quedaban las plantillas, pero, desde que lo descubrí, siempre tengo un contenedor de MailHog en mi ordenador 🙂. De esta forma, trabajo sin necesidad de Internet y sin tener que esperar a que el mensaje se envíe a otros servidores: no hay nada más rápido que localhost.

Espero que te haya picado el gusanillo y a partir de hoy envíes correos electrónicos en entorno de desarrollo a través de MailHog y no un SMTP real. Así conservarás la credibilidad de tu cuenta de correo.

¡Qué tengas un feliz coding!