Hoy revisaremos como enviar Emails con Symfony 5 con Mailer y algún Bridge como Amazon AWS SES u otros proveedores de SMTP como Gmail, Mailchimp, entre otros.

Los componentes Mailer y Mime, disponibles desde la versión 4.3 de Symfony, forman un poderoso sistema para crear y enviar correos electrónicos, con soporte para mensajes Multipart, integración con Twig, CSS, archivos adjuntos y mucho más. El componente Mime es quién permite crear los Emails que vas a enviar, y Mailer es quien realmente se encarga de enviarlos.

Otros artículos de Symfony 5 que podrían ser de interés:

Symfony 5 y el componente Mailer

El componente Mailer incluye soporte para los siguientes servicios: Amazon SES, MailChimp, Mailgun, Gmail, Postmark y SendGrid. Cada uno de ellos se instala por separado, así que si quieres por ejemplo usar en tu aplicación algunos de estos proveedores deberás escoger e instalar el más adecuado a tus necesidades:

Proveedores 

Instalación en Symfony 5

Amazon SES

composer require symfony/amazon-mailer

Gmail

composer require symfony/google-mailer

MailChimp

composer require symfony/mailchimp-mailer

Mailgun

composer require symfony/mailgun-mailer

Postmark

composer require symfony/postmark-mailer

SendGrid

composer require symfony/sendgrid-mailer

En este artículo te mostraré como desarrollar tu Service de Email en Symfony 5 con Mailer y Amazon AWS SES.

Envio de Emails con Symfony 5 y Amazon AWS SES

1- Configuración de Amazon AWS SES y AWS IAM

Para poder utilizar este servicio que ofrece Amazon AWS desde Symfony 5, deberás empezar configurando AWS SES desde la consola de AWS:
https://eu-west-1.console.aws.amazon.com/ses/home

Deberás añadir tu dominio:

Nuevo dominio en AWS SES

Y las cuentas de Email desde las cuales deseas enviar tus mensajes:

Nuevo email en AWS SES

Una vez configurado AWS SES, deberás añadir un nuevo usuario IAM con permisos para gestionar AWS SES. Podrás crearlo desde la consola de AWS:
https://console.aws.amazon.com/iam/home

Nuevo usuario en AWS IAM con permisos para AWS SES

Una vez tengas todo configurado, es probable que los emails que envíes a correos con dominios diferentes al que has configurado no lleguen nunca.

Esto es debido a que por defecto la configuración de AWS SES solo permite el envio de Emails a correos del mismo dominio configurado, en nuestro caso itdo.com. Así que deberás solicitar al servicio de soporte de AWS que te habiliten el envío a dominios externos como podría ser emails genéricos como gmail.com, outlook.com, yahoo.com, yandex.com, etc. Podrás solicitarlo desde el AWS Support Center:
https://console.aws.amazon.com/support/home

Solicitud de envio a dominios externos con AWS SES

2- Instalación del componente Mailer AWS SES en Symfony 5

Ahora que tenemos el servicio de AWS SES preparado, pasamos a instalar el componente Mailer AWS SES. Para ello simplemente tendremos que ejecutar el composer correspondiente a este proveedor de servicio de Email:

3- Configuración y ejemplo del componente Mailer AWS SES en Symfony 5

Y para acabar, a continuación verás un ejemplo de un Service en Symfony 5 para enviar los Emails con el componente Mailer AWS SES. El AccessKeyId y el SecretKey son los correspondientes al usuario creado anteriormente en IAM.

Ejemplo de Service en Symfony 5 para el envio de Emails con AWS SES

Al ejecutar el componente Mailer con $mailer->send($message), este envía los mensajes inmediatamente al proveedor, en este caso AWS SES. Si tu proyecto requiere enviar muchos Emails concurrentes y quieres mejorar el rendimiento de tu Symfony 5, te recomiendo que revises el componente Messenger para enviar los mensajes de manera asíncrona, creando un gestor de cola al igual que Kafka. En este artículo de la documentación de Symfony encontrarás más detalles de la integración de Messenger con Mailer.

El código mostrado es solo un ejemplo para ver de un vistazo la estructura, en el caso de desarrollar este Service en producción, deberás añadir las credenciales de AWS y el Email “from” en el fichero de configuración .env de tu proyecto Symfony.

Conclusión

Con todo el potencial que ofrece Mailer y Mime en Symfony 5, solo queda añadir a la receta perfecta un buen servicio de Email como AWS SES, Gmail o Mailchimp, basados en cloud, para enviar emails de marketing, notificaciones y cualquier Email que creas necesario. Por lo general son servicios muy fiables para mantener una buena reputación de tu dominio de Email, garantizando que tus mensajes llegan a la bandeja de entrada de tus clientes o contactos, evitando el Spam a toda costa.

¿Qué proveedor de Email utilizas en tu organización? ¿Con qué propósitos utilizas Mailer en Symfony 5?

Photo by Markus Winkler on Unsplash

Referencias:
- The Mailer Component
- New in Symfony 4.3: Mailer component