O que é o SwiftmailerBundle?
O SwiftmailerBundle é uma biblioteca de correio eletrônico que permite o envio de e-mails de forma fácil e rápida. O Symfony é um dos principais frameworks PHP e oferece muitas funcionalidades para desenvolvimento de projetos web. O SwiftmailerBundle é um dos seus principais pacotes, que pode ser facilmente integrado com projetos que usam o Symfony.
Como instalar o SwiftmailerBundle em um projeto Symfony?
Para instalar o SwiftmailerBundle em seu projeto Symfony, adicione o seguinte código ao arquivo “composer.json”:
"require": {
"swiftmailer/swiftmailer-bundle": "~2.1"
}
Em seguida, execute o comando “php composer.phar update” para instalar o pacote no diretório “vendor” do seu projeto.
Como configurar o SwiftmailerBundle no Symfony?
Para configurar o SwiftmailerBundle em seu projeto Symfony, abra o arquivo “app/config/config.yml” e adicione as seguintes informações:
swiftmailer:
transport: smtp
host: seu_servidor_smtp
username: seu_login_smtp
password: sua_senha_smtp
spool: {type: memory}
No exemplo acima, o Swiftmailer foi configurado para usar o protocolo SMTP para envio de e-mails. O host, login e senha devem ser substituídos pelas informações do seu servidor SMTP. Além disso, o “spool” define como os e-mails serão armazenados no servidor antes do envio.
Como enviar um e-mail usando o SwiftmailerBundle no Symfony?
Para enviar um e-mail usando o SwiftmailerBundle em seu projeto Symfony, você precisa criar uma instância do serviço “mailer” e usar o método “send()” para enviar o e-mail:
// Criando uma instância do serviço "mailer"
$mailer = $this->get('mailer');
// Criando uma mensagem de e-mail
$message = Swift_Message::newInstance()
->setSubject('Assunto do e-mail')
->setFrom('seuemail@seuservidor.com')
->setTo('destinatario@seuservidor.com')
->setBody('Conteúdo do e-mail');
// Enviando a mensagem de e-mail
$mailer->send($message);
Como enviar um e-mail usando uma view no SwiftmailerBundle?
Para enviar um e-mail usando uma view no SwiftmailerBundle em seu projeto Symfony, você precisa criar um arquivo do tipo “.html.twig” na pasta “app/Resources/views”. Em seguida, você precisa criar um arquivo do tipo “.txt.twig” na mesma pasta, com o conteúdo do e-mail em formato de texto. Finalmente, você precisa instanciar o serviço “mailer” e configurá-lo com o assunto do e-mail e o endereço do remetente e destinatário:
// Criando uma instância do serviço "templating"
$templating = $this->container->get('templating');
// Renderizando a view do e-mail
$body = $templating->render(
'exemplo_email.html.twig',
array('nome' => $nome, 'mensagem' => $mensagem)
);
// Criando uma mensagem de e-mail
$message = Swift_Message::newInstance()
->setSubject('Assunto do e-mail')
->setFrom('seuemail@seuservidor.com')
->setTo('destinatario@seuservidor.com')
->setBody($body, 'text/html')
->addPart($body, 'text/plain');
// Enviando a mensagem de e-mail
$mailer->send($message);
Como adicionar anexos em um e-mail no SwiftmailerBundle?
Para adicionar anexos em um e-mail no SwiftmailerBundle em seu projeto Symfony, você precisa instanciar o serviço “mailer” e configurá-lo com o assunto do e-mail e o endereço do remetente e destinatário. Em seguida, você precisa adicionar o anexo usando o método “attach()”:
// Criando uma instância do serviço "mailer"
$mailer = $this->get('mailer');
// Criando uma mensagem de e-mail
$message = Swift_Message::newInstance()
->setSubject('Assunto do e-mail')
->setFrom('seuemail@seuservidor.com')
->setTo('destinatario@seuservidor.com')
->setBody('Conteúdo do e-mail')
->attach(Swift_Attachment::fromPath('caminho/para/o/arquivo'));
// Enviando a mensagem de e-mail
$mailer->send($message);
Como enviar um e-mail para múltiplos destinatários no SwiftmailerBundle?
Para enviar um e-mail para múltiplos destinatários no SwiftmailerBundle em seu projeto Symfony, você precisa instanciar o serviço “mailer” e configurá-lo com o assunto do e-mail e o endereço do remetente e todos os destinatários:
// Criando uma instância do serviço "mailer"
$mailer = $this->get('mailer');
// Criando uma mensagem de e-mail
$message = Swift_Message::newInstance()
->setSubject('Assunto do e-mail')
->setFrom('seuemail@seuservidor.com')
->setTo(array('destinatario1@seuservidor.com', 'destinatario2@seuservidor.com'))
->setBody('Conteúdo do e-mail');
// Enviando a mensagem de e-mail
$mailer->send($message);
Como enviar um e-mail com cópia e cópia oculta no SwiftmailerBundle?
Para enviar um e-mail com cópia e cópia oculta no SwiftmailerBundle em seu projeto Symfony, você precisa instanciar o serviço “mailer” e configurá-lo com o assunto do e-mail, o endereço do remetente e destinatário. Em seguida, você precisa adicionar as cópias usando os métodos “setCc()” e “setBcc()”:
// Criando uma instância do serviço "mailer"
$mailer = $this->get('mailer');
// Criando uma mensagem de e-mail
$message = Swift_Message::newInstance()
->setSubject('Assunto do e-mail')
->setFrom('seuemail@seuservidor.com')
->setTo('destinatario@seuservidor.com')
->setCc('copia@seuservidor.com')
->setBcc('copiaoculta@seuservidor.com')
->setBody('Conteúdo do e-mail');
// Enviando a mensagem de e-mail
$mailer->send($message);
Como usar templates personalizados para enviar e-mails no SwiftmailerBundle?
Para usar templates personalizados para enviar e-mails no SwiftmailerBundle em seu projeto Symfony, você precisa criar um arquivo do tipo “.html.twig” na pasta “app/Resources/views” e preenchê-lo com o conteúdo do e-mail. Em seguida, você precisa instanciar o serviço “mailer” e configurá-lo com o assunto do e-mail, o endereço do remetente, destinatário e o corpo do e-mail usando o método “setBody()”:
// Criando uma instância do serviço "mailer"
$mailer = $this->get('mailer');
// Renderizando a view do e-mail
$body = $this->renderView(
'exemplo_email.html.twig',
array('nome' => $nome, 'mensagem' => $mensagem)
);
// Criando uma mensagem de e-mail
$message = Swift_Message::newInstance()
->setSubject('Assunto do e-mail')
->setFrom('seuemail@seuservidor.com')
->setTo('destinatario@seuservidor.com')
->setBody($body, 'text/html');
// Enviando a mensagem de e-mail
$mailer->send($message);
Como enviar e-mails em background usando o SwiftmailerBundle?
Para enviar e-mails em background usando o SwiftmailerBundle em seu projeto Symfony, você precisa configurar o “spool” no arquivo “app/config/config.yml”:
swiftmailer:
transport: smtp
host: seu_servidor_smtp
username: seu_login_smtp
password: sua_senha_smtp
spool: { type: memory }
Isso fará com que os e-mails sejam armazenados na memória ao invés de serem enviados imediatamente. Em seguida, você precisa criar um comando para enviar estes e-mails. Para isso, crie um arquivo com o seguinte conteúdo:
use SymfonyBundleFrameworkBundleCommandContainerAwareCommand;
use SymfonyComponentConsoleInputInputInterface;
use SymfonyComponentConsoleOutputOutputInterface;
class EnviaEmailsCommand extends ContainerAwareCommand
{
protected function configure()
{
$this
->setName('envia-emails')
->setDescription('Envia os emails pendentes');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$mailer = $this->getContainer()->get('swiftmailer.mailer');
$transport = $mailer->getTransport();
$spool = $transport->getSpool();
$spool->flushQueue($transport);
}
}
Por fim, execute o seguinte comando para enviar os e-mails em background:
php app/console swiftmailer:spool:send --env=prod