Cómo utilizar MailCatcher para probar correos electrónicos

22 de febrero de 2024

Lang: cs en de es

Cuando desarrollas una aplicación que envía correos electrónicos, normalmente necesitas comprobar que el correo se ha enviado. También necesitas comprobar el contenido del email. Mailcatcher es una gran herramienta para todo esto, y atrapa correos electrónicos para que puedas estar seguro de que no tocas nada cuando pruebas a usuarios reales, y simplemente puedes comprobar el contenido en tu ordenador. Una gran característica de Mailcatcher es que puedes simplemente ejecutarlo usando el docker.

Al desarrollar y probar en una aplicación web, quiere probar completamente el proceso de envío de correos electrónicos y su contenido, pero se encuentra con dos problemas:

  • no quiere propagar innecesariamente las credenciales de la cuenta de correo electrónico
  • no quiere que los correos electrónicos lleguen al usuario

Si quieres enviar emails de la forma estándar significa, tienes que configurar la aplicación de alguna manera, para enviar correos electrónicos a través de su servidor de correo, lo que significa que cada desarrollador tendrá acceso a enviar correos electrónicos a través de su servidor de correo.

Por ejemplo, puede abordar la situación modificando la aplicación para que los correos electrónicos no salgan. Esto no hará que accidentalmente envíe un correo electrónico de prueba a los usuarios y no necesitas acceso al servidor de correo para el desarrollo. Pero de nuevo, no sabrás si el envío de emails funciona realmente. Además, entonces tendrás dificultades para comprobar el contenido del correo electrónico. Además, es completamente inútil modificar la aplicación.

Una solución sencilla a esta situación es utilizar MailCatcher. Diriges el envío de correos a MailCatcher, que puede actuar como mailer para recibir correos. Y desde la aplicación probada, puedes enviar todo por defecto sin cambios. Al hacerlo, puedes estar seguro de que el usuario no se perderá ningún email. No tienes que compartir credenciales de acceso para enviar correos. Y puedes ver fácilmente el contenido del email en detalle.

Utilizo MailCatcher para desarrollar aplicaciones web. Pero también podrías usarlo cuando desarrollas una aplicación despot, programas una utilidad de consola o simplemente probando una herramienta que envía correos electrónicos.

Uso

Usted construye MailCatcher como un servidor de correo para su aplicación. Posteriormente, todos los correos electrónicos enviados son visibles en la interfaz de administración basada en web de MailCatcher. En MailCatcher, puede ver el correo electrónico en su versión HTML, en la llamada versión "texto plano o ver el código fuente completo del correo electrónico y ver las cabeceras del correo electrónico en detalle.

¿Qué aspecto tiene MailCatcher? Esta es una vista de un correo electrónico capturado. Visualización de la versión HTML del correo electrónico:
mailcatcher text html

Ver el correo electrónico capturado y su versión en texto plano:
mailcatcher texto plano

Ver el código fuente del correo electrónico capturado:
mailcatcher mail source

También es posible descargar el correo electrónico completo como archivo fuente - un archivo con la extensión "eml".

Funcionamiento

Puedes ejecutar MailCatcher como un contenedor docker.

Añade las siguientes líneas a tu docker-compose.yml y MailCatcher se descargará y ejecutará cuando inicies tu entorno de desarrollo.

Mailcatcher:
  imagen: dockage/mailcatcher
  puertos:
    - 1080:1080
A continuación, en http://localhost:1080/ ya estará disponible la interfaz de administración web de MailCatcher.

En el puerto 1025 hay un servidor SMTP donde puedes enviar correos electrónicos desde tu aplicación.

Conexión a la aplicación

Ahora necesitas configurar tu aplicación para que utilice MailCatcher como servidor de correo. Te mostraré cómo modificar la configuración si estás usando PHP framework Nette o Symphony.

Symphones

Si utiliza el framework PHP Symfony versión 6 o 7 y Symfony mailer, entonces sólo tienes que añadir/editar el archivo de configuración .env.local por una línea:

MAILER_DSN=smtp://mailcatcher:1025

Para más detalles, consulte Symphony mailer.

Nette

Si utilizas el framework PHP Nette se utiliza por defecto la función php mail(), que suele llamar al comando de sistema sendmail. Por tanto, es necesario modificar la configuración para utilizar el protocolo SMTP.

Para enviar correo en Nette, se puede utilizar la clase Nette\Mail\SendmailMailer, que utiliza la función mail(). Para el envío por SMTP, existe la clase Nette\Mail\SmtpMailer.
Sin embargo, lo ideal es que utilice la interfaz Nette\Mail\Mailer en el código de su aplicación, que Nette preparará y configurará según la configuración especificada. Y que esta clase sea pasada por el constructor o inyectada en el .

Añade la siguiente configuración al fichero de configuración de neon:

mail:
	# use SmtpMailer
	smtp: true # (bool) por defecto es false
	host: mailcatcher
	puerto: 1025
Esta edición establece el protocolo SMPT a utilizar y los parámetros de conexión al servidor SMTP. Entonces, cuando use la interfaz \Nette\Mail\Mailer, Nette le pasará la clase \Nette\Mail\SmtpMailer configurada. y podrás enviar correos directamente.

Para más detalles consulta Nette enviando correos electrónicos y Configuración SMTP de Nette.

Video tutorial

Videotutorial sobre cómo poner en marcha MailCatcher y empezar a utilizarlo con una aplicación web, que está programada en el framework PHP Symfony:

Otras soluciones

Otras soluciones que pueden dar un servicio similar:

Envío de correo

Enviar emails y entregar emails son dos acciones distintas, aunque relacionadas, que tienen éxito para el funcionamiento de los emails. Si tienes un problema con la entrega de emails, estos caen en SPAM o no llegan. Necesitas hacer un detallado email deliverability analysis y ajustar la configuración de tu dominio y servidor de correo en consecuencia.

Si necesitas una consulta o cualquier otro tipo de ayuda con emails, Nette o Symfony no dudes en contactarme.

Artículos sobre un tema similar

Análisis de la asignación y fijación de precios del desarrollo de proyectos de software
Programa Python para controlar Docker mediante la API
API OpenAI de Python
Creación de una aplicación web WebSocket y configuración de un proxy
Gestión de proyectos: desarrollo ágil de software
Cómo ejecutar aplicaciones PHP antiguas
Lo que debe saber un buen programador
Lenguaje de programación Rust
NodeJS: desarrollo, configuración del servidor
Fallo de seguridad de Nette CVE-2020-15227
API REST: API de plataforma
Alojamiento web y de correo personalizado con el software ISP Config
Programación en SQL: PostgreSQL, MySQL/MariaDB
HTTPS: web segura
Base de datos NoSQL Mongo DB
Connecting to Microsoft SQL Server from Linux
¿Cuál es la descripción del trabajo de un programador?
Localización de aplicaciones Python
Qué correo y alojamiento web elegir
Digispark - Programar microcontrolador Atmel ATtiny con Arduino IDE
Desarrollo para procesadores ARM con Arduino IDE
Cómo programar el procesador WiFi ESP8266
Smartphone abierto con Linux - Openmoko Neo FreeRunner

Boletin informativo

Si está interesado en recibir noticias puntuales por correo electrónico.
Puedes registrarte rellenando tu email suscripción de noticias.


+