Novo Componente Mailer Adicionado no Symfony 4.3
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 MailerInterface
em 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