Novo Componente Mailer Adicionado no Symfony 4.3

Andréia Bohner
Jun 6 · 2 min read

A versão estável do Symfony 4.3 foi lançada em 30 de maio de 2019, mas ainda há alguns novos recursos que não foram mencionados. Neste artigo você aprenderá sobre o componente Mailer, o terceiro componente adicionado pelo Symfony 4.3 (após o componente Mime e o componente HttpClient).

O componente Mime permite criar mensagens de e-mail, mas, para realmente enviá-las, você precisar usar o componente Mailer. Os e-mails são entregues por meio de um “transporte”, que pode ser um servidor SMTP local ou um serviço de e-mail de terceiros.

Esse componente já fornece suporte para os serviços mais populares: Amazon SES, MailChimp, Mailgun, Gmail, Postmark e SendGrid. Eles são instalados separadamente, portanto se sua aplicação usar por exemplo o Amazon SES, execute este comando:

$ composer require symfony/amazon-mailer

Isso adicionará algumas variáveis ​​de ambiente em seu arquivo .env onde você poderá configurar o serviço específico que está usando:

# .env
AWS_ACCESS_KEY=...
AWS_SECRET_KEY=...
MAILER_DSN=smtp://$AWS_ACCESS_KEY:$AWS_SECRET_KEY@ses

Isso é tudo. Agora você pode injetar o serviço mailer em qualquer serviço ou controlador usando type-hint da classe MailerInterfaceem um argumento do construtor:

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);
    }
}

Quando você chama $this->mailer->send($email), a mensagem de e-mail é enviada para o transporte imediatamente. Para melhorar o desempenho, você pode aproveitar o componente Messenger para enviar as mensagens posteriormente através de um transporte do Messenger. Leia a seção Enviando Mensagens Assíncronas nos documentos do Mailer para saber mais sobre isso.

Tradução de: New in Symfony 4.3: Mailer component