# Symfony: ¿Como usar el componente Mailer?


## 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](https://symfony.com/doc/current/service_container/autowiring.html)** 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-&gt;mailer-&gt;send($email)`, el mensaje se envía inmediatamente. Si quieres mejorar el rendimiento, usa el [componente Messenger](https://www.franciscougalde.com/2019/07/17/symfony-como-usar-el-componente-messenger-parte-1/) para enviar los mensajes de manera asíncrona. Lee ademas [este artículo de la documentación de Symfony](https://symfony.com/doc/current/mailer.html#sending-messages-async) 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.
