O que é o SwiftmailerBundle?
O Swiftmailer é um pacote de bibliotecas para enviar e-mails em PHP. O SwiftmailerBundle é uma extensão para o Symfony Framework que permite usar o Swiftmailer de forma mais fácil e integrada ao framework. Ele oferece um conjunto de recursos para enviar e-mails nos seus aplicativos Symfony.
Como instalar o SwiftmailerBundle no Symfony?
Para instalar o SwiftmailerBundle no Symfony, você precisa adicionar a dependência em seu arquivo composer.json. Após isso, execute o comando “composer update”. Por fim, registre o bundle no arquivo “app/AppKernel.php”. Veja um exemplo abaixo:
composer require symfony/swiftmailer-bundle
Como configurar o SwiftmailerBundle?
A configuração do SwiftmailerBundle é feita através do arquivo “config.yml”. É possível definir a configuração de transporte, autenticação, envio de e-mails, além de outras opções. Veja um exemplo de configuração abaixo:
swiftmailer:
transport: smtp
host: '%env(MAILER_HOST)%'
port: '%env(MAILER_PORT)%'
username: '%env(MAILER_USER)%'
password: '%env(MAILER_PASSWORD)%'
encryption: '%env(MAILER_ENCRYPTION)%'
spool: { type: 'memory' }
Como enviar e-mails com o SwiftmailerBundle?
Para enviar um e-mail com o SwiftmailerBundle, você precisa criar uma instância do “Swift_Message” e definir os cabeçalhos, corpo e outras opções do e-mail. Depois, envie a mensagem utilizando o serviço “swiftmailer.mailer”. Veja um exemplo abaixo:
$message = (new Swift_Message('Assunto'))
->setFrom('seuemail@exemplo.com')
->setTo('destinatario@exemplo.com')
->setBody('Conteúdo do e-mail');
$container->get('mailer')->send($message);
Como usar templates para os e-mails com o SwiftmailerBundle?
O SwiftmailerBundle permite utilizar templates para os e-mails, facilitando a criação e manutenção dos conteúdos das mensagens. Para isso, é necessário criar um template utilizando o Twig e carregá-lo no serviço “swiftmailer.mailer”. Veja um exemplo abaixo:
$message = (new Swift_Message('Assunto'))
->setFrom('seuemail@exemplo.com')
->setTo('destinatario@exemplo.com')
->setBody(
$this->container->get('templating')->render(
'AppBundle:Email:template.html.twig',
array('name' => $name)
),
'text/html'
);
$container->get('mailer')->send($message);
Como enviar anexos com o SwiftmailerBundle?
O SwiftmailerBundle permite enviar anexos junto com os e-mails. Para isso, crie um objeto “Swift_Attachment” e adicione-o à mensagem utilizando o método “attach()”. Veja um exemplo abaixo:
$message = (new Swift_Message('Assunto'))
->setFrom('seuemail@exemplo.com')
->setTo('destinatario@exemplo.com')
->setBody('Conteúdo do e-mail');
$attachment = new Swift_Attachment(file_get_contents('/caminho/do/arquivo.pdf'), 'nome_do_arquivo.pdf', 'application/pdf');
$message->attach($attachment);
$container->get('mailer')->send($message);
Como usar o Mailer Events com o SwiftmailerBundle?
O SwiftmailerBundle oferece um conjunto de eventos que podem ser utilizados para interceptar e modificar o envio de e-mails. Para utilizar os eventos, crie um listener e registre-o no arquivo “services.yml”. Por exemplo, é possível utilizar o evento “swiftmailer.send” para adicionar ou modificar o conteúdo dos e-mails antes de serem enviados. Veja um exemplo abaixo:
app.sent_emails_listener:
class: AppBundleEventListenerSentEmailsListener
tags:
- { name: kernel.event_listener, event: swiftmailer.send, method: onSendEmail }
Como usar o Spool com o SwiftmailerBundle?
O Spool é uma opção que permite o envio de e-mails de forma assíncrona. Com ele, os e-mails são armazenados localmente e enviados durante um intervalo de tempo pré-determinado. Para utilizar o Spool, adicione o trecho de código de exemplo abaixo na configuração do SwiftmailerBundle:
swiftmailer:
...
spool: { type: 'memory' }
Como enviar e-mails usando diferentes contas com o SwiftmailerBundle?
Se você precisa enviar e-mails com diferentes contas, é possível criar diferentes configurações para o SwiftmailerBundle e utilizá-las separadamente no seu código. Para isso, basta criar uma nova configuração no arquivo “config.yml” e passar o nome da configuração como argumento para o serviço “swiftmailer.mailer”. Veja um exemplo abaixo:
swiftmailer:
mailers:
mailer1:
transport: smtp
host: 'host1'
port: 25
username: 'username1'
password: 'password1'
mailer2:
transport: smtp
host: 'host2'
port: 25
username: 'username2'
password: 'password2'
$container->get('swiftmailer.mailer.mailer1')->send($message);
$container->get('swiftmailer.mailer.mailer2')->send($message);
Como usar diferentes transportes com o SwiftmailerBundle?
O SwiftmailerBundle permite o uso de diferentes transportes para enviar e-mails. Por exemplo, é possível utilizar o transporte SMTP para envio de e-mails normais e o transporte API do Mailgun para envio de e-mails transacionais. Para utilizar diferentes transportes, crie diferentes configurações no arquivo “config.yml” e passe o nome da configuração como argumento para o serviço “swiftmailer.mailer”. Veja um exemplo abaixo:
swiftmailer:
...
mailers:
smtp:
transport: smtp
host: 'host1'
port: 25
username: 'username1'
password: 'password1'
api:
transport: mailgun
host: 'api.mailgun.net'
port: 443
username: 'postmaster@sandboxXXXXXXXXXXXXXXXXXXXXXXX.mailgun.org'
password: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
$container->get('swiftmailer.mailer.smtp')->send($message);
$container->get('swiftmailer.mailer.api')->send($message);