Mail Service
El Mail Service es un microservicio de correo electrónico que envía emails utilizando plantillas basadas en Mustache. Fue creado para que nuestros equipos de desarrollo en 2am.tech pudieran evitar tener que configurar servicios de correo repetidamente en proyectos que utilizan una infraestructura basada en microservicios.
Este servicio es una combinación de dos aplicaciones independientes:
- una aplicación CI desarrollada con Symfony, y
- Es una API construida con Slim3, que utiliza una técnica llamada spooling (procesamiento en cola).
El proyecto utiliza Monolog para registrar, Fractal como serializador, Tactitiano como bus de comandos, gettext para traducciones, Autenticación de acceso básica y Tokens web Json para la autenticación (esto es opcional), y Filtro Zend para el filtrado y la validación de datos.
Docker Compose y Colección de Postman
Se incluyen archivos Docker Compose y una colección de Postman para facilitar el desarrollo, aunque Docker no es estrictamente necesario, ya que también puedes utilizar fácilmente el servidor embebido de PHP.
El proyecto intenta seguir los principios de DDD (Domain-Driven Design).
Instalación
Instala la última versión usando Composer (aquí se muestra un ejemplo utilizando una URL de GitHub):
$ composer create-project --no-interaction --stability=dev 2amigos/mail-service
Enviar un Correo a la Cola del Sistema de Archivos
Lo primero que necesitamos hacer es modificar el mapa del localizador de commandBus y utilizar mail.send.queue.handler en lugar de mail.send.spool.handler:
$map = [
CreateTokenCommand::class => 'token.create.handler',
SendMessageCommand::class => 'mail.send.queue.handler',
];
Y eso es todo. Con la misma llamada anterior, esta vez el mensaje se enviará a la carpeta.
Enviar un Correo desde la Cola del Sistema de Archivos
Como mencionamos anteriormente, el paquete php-enqueue/enqueue-bundle incluye un conjunto de comandos muy útiles. Para consultar la referencia completa de estos comandos, te recomendamos visitar su documentación oficial.
El comando para consumir todos los mensajes que llegan a la cola es enqueue:consume:
$ ./bin/console enqueue:consume mail --no-interaction -vvv --receive-timeout=60000