Componente Mailer de Symfony
El componente de Symfony fue introducido en la versión 4.3 y aún esta considerado un feature experimental Nota a considerar antes de comenzar a usarlo en producción.
Otra de las necesidades más comunes en cada aplicación que desarrollamos, es el uso de una librería que nos provea un cliente de correo.
Symfony, como era de esperarse, nos provee siempre de herramientas y componente muy útiles que nos permiten desarrollar nuestras aplicaciones con una garantía de calidad impecable.
Es por esto, que quiero mostrarte como funciona este nuevo componente que se introduce en el framework desde la versión de Symfony 4.3
Vale la pena destacar que el componente es quién permite crear los mensajes de correo a enviar, y Mailer es quien realmente se encarga de enviarlos.
Los mensajes se envían mediante “transports”, que pueden ser desde un servidor SMTP local hasta un servicio de terceros para envío masivo de emails.
Este componente nos provee de integración con los siguientes servicios: Amazon SES, MailChimp, Mailgun, Gmail, Postmark y SendGrid. Cada uno de estos se instala por separado así que para este post te mostraré un ejemplo de como usar en tu aplicación Amazon SES.
Instalación del componente Mailer para Amazon SES
composer require symfony/amazon-mailer
Este paquete, al terminar su instalación, añade algunas variables a nuestro fichero de entorno .env para poder configurar los parámetros requeridos para su funcionamiento:
# .env
AWS_ACCESS_KEY=...
AWS_SECRET_KEY=...
MAILER_DSN=smtp://$AWS_ACCESS_KEY:$AWS_SECRET_KEY@ses
Y con esto ya tenemos todo listo. Lo siguiente es inyectar el servicio de email en cualquier parte donde sea requerido gracias al **autowiring de symfony**, añadiendo tan solo el argumento MailerInterface
en el constructor de tu clase eso es todo
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
class SomeService
{
private $mailer;
public function __construct(MailerInterface $mailer)
{
$this->mailer = $mailer;
}
public function sendNotification()
{
$email = (new Email())
->from('hello@example.com')
->to('you@example.com')
->subject('Time for Symfony Mailer!')
->text('Sending emails is fun again!')
->html('<p>See Twig integration for better HTML integration!</p>');
$this->mailer->send($email);
}
}
Cuando llamas a $this->mailer->send($email)
, el mensaje se envía inmediatamente. Si quieres mejorar el rendimiento, usa el componente Messenger para enviar los mensajes de manera asíncrona. Lee ademas este artículo de la documentación de Symfony para aprender más sobre cómo hacerlo.
Es todo por ahora con todo lo relacionado con este maravilloso componente de Symfony. Estaré publicando actualizaciones a medida que el componente vaya incorporando nuevas funcionalidades.
Recuerda que si tienes alguna sugerencia o pregunta, no dudes en dejar tus comentarios al final del post.
Si te gustó este post, ayúdame a que pueda servirle a muchas más personas, compartiendo mis contenidos en tus redes sociales.
Espero que este post haya sido de gran ayuda para ti, y como siempre, cualquier inquietud o duda que tengas, puedes contactarme por cualquiera de las vías disponibles, o dejando tus comentarios al final de este post. También puedes sugerir que temas o post te gustaría leer a futuro.