Mailhog un catch-all email para SMTP testing

Mailhog un catch-all email para SMTP testing

Este artículo inicia con un requerimiento por parte del equipo de QA, ellos necesitan automatizar el proceso de registro de usuarios y dado que el API envía un mensaje vía email con un código para validar el email que se ha dado de alta, pues para QA esto se vuelve una tarea manual ya que deben de ir a una casilla de correo y confirmar la creación mediante el enlace enviado.

Mailhog al rescate

MailHog es una herramienta de prueba de correo electrónico con un servidor SMTP falso. Encapsula el protocolo SMTP con extensiones que no requiere implementaciones específicas de backend, ejecuta un servidor SMTP súper simple que toma los correos electrónicos salientes que se le envían y que luego se pueden ver desde una interfaz web.

MailHog es una herramienta portátil construida con Golang, se puede ejecutar en cualquier plataforma, y los archivos binarios de Golang te permiten configurarlo de manera muy simple: casi como solo copiar y ejecutar (existe una imagen de Docker que tambien puedes utilizar).

¿Para qué sirve?

MailHog está diseñado para developers, y estos pueden usar esta herramienta para probar el envío de correo electrónico de la aplicación de manera más eficiente. A diferencia de un servidor SMTP real, uno falso evita problemas relacionados con la configuración del servidor o algo por el estilo. MailHog simplemente te permite enviar correos electrónicos a cualquier destinatario y los almacena para su visualización como mencione anteriormente. Además, puedes ver los correos electrónicos acumulados mediante la interfaz de usuario web o recuperarlos mediante una API para realizar pruebas automatizadas (y específicamente esto es lo que nos importa).

Trataré de explicar como ponerlo en marcha y como se puede utilizar.

Ejecutando Mailhog desde Docker

Para esto necesitaras tener instalado Docker y sera necesario que crees un archivo de docker-compose.yml con la siguiente configuración:

version: '3'

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

y finalmente desde la consola levantas la imagen ejecutando

docker-compose up --build

Esto debería ser suficiente para descargar Mailhog y ponerlo en marcha en tu local, como ya habrás notado se exponen 2 puertos, el 1025 que se utiliza para enviar los mensajes de correo y el 8025 que se utiliza para acceder la interfaz web desde tu navegador.

Ahora para probar que esto funciona simplemente necesitas codigo que se conecte al servidor de SMTP (Mailhog) y envie un mensaje, este es un pequeño script de ejemplo de como hacerlo con nodejs utilizando nodemailer.

const nodemailer = require('nodemailer');

const transporter = nodemailer.createTransport({
    host: 'localhost',
    port: 1025
});

const messageStatus = transporter.sendMail({
    from: '[email protected]',
    to: '[email protected]',
    subject: 'Hola Mailhog!',
    text: 'Aqui va el contenido del mensaje'
});

Ahora si abres tu navegador en la url http://localhost:8025, deberías poder ver el mensaje que has enviado y como dije anteriormente, también cuenta con una API y los diferentes endpoints expuestos se pueden encontrar en la especificación de su Swagger JSON y YAML en el repositorio de GitHub para Mailhog.

Para adelantar un poco este tema y obtener todos los mensajes de un correo electrónico específico usaremos la siguiente ruta GET http://localhost:8025/api/v2/search?kind=to&[email protected] y eso debería ser suficiente para que tengas de regreso un objeto json con la información de ese mensaje de correo y con ello obviamente, el equipo de QA ya tiene en el JSON la información que necesitan para continuar con el proceso de registro, todo eso sin necesidad de la interacción humana, nosotros lo hemos automatizado utilizando cypress, pero quizás eso sea otro articulo.

Probar los flujos de correo electrónico es muy importante para garantizar una experiencia de usuario, especialmente porque estos flujos a veces pueden ser fundamentales para la funcionalidad general, como una confirmación de registro en este caso.

El uso de nuestro servidor SMTP real puede resultar en el envío de un correo electrónico al usuario por error. Además, configurar un SMTP falso utilizando un proveedor de SaaS como Mailtrap puede resultar caro. En su lugar, podemos usar Mailhog y Docker para crear este servidor rápidamente que nos permite consultar los correos electrónicos enviados para que podamos usarlos en nuestras pruebas sin tener que lidiar con cuotas o planes de precios.

Happy coding! :)


Photo by Phil Hearing on Unsplash

Jack Fiallos

Jack Fiallos

Te gustó este artículo?