PHP
Enviando emails no PHP utilizando o Swift Mailer
Uma dúvida que sempre vejo na comunidade PHP, é o que fazer para enviar e-mails nas aplicações.
Se você procurar pela internet, achará dezenas e dezenas de tutoriais de como fazê-lo, até aí tudo bem, só que certos tutoriais, demonstram o envio de e-mails de forma procedural, com códigos extensos e sem nenhuma estrutura de orientação a objetos. Isto é muito ruim! Em pleno PHP 5.6, temos sim, que usar o paradigma de orientação a objetos e não ficar reinventando a roda.
Qual é a ideia?
Usar o Swift Mailer, uma biblioteca poderosa para o envio de e-mails, fabricada pela mesma empresa que produz o framework Symfony, a SensioLabs. O Swift Mailer pode ser usado em qualquer versão >= PHP 5.2. Com o ele é possível:
- Enviar e-mails usando SMTP, sendmail, postfix ou alguma implementação de transporte customizada
- Enviar e-mails de servidores que requerem username e password e/ou encriptação
- Proteger headers de ataques de injeção sem remover dados do conteúdo da requisição
- Enviar compilação MIME HTML/multipart
- Usar orientação por eventos para incrementar a biblioteca
- Lidar com grandes anexos usando pouca memória
O que faremos?
- Instalar o Composer
- Como usar o Swift Mailer
- Considerações finais.
Passos
- Instalar o Composer.
Confira aqui como instalar o Composer.
- Como usar o Swift Mailer.
Para instalá-lo faça no seu terminal:
composer require swiftmailer/swiftmailer
Para usar o Swift Mailer, basicamente temos que fazer:
- Chamar o método
newInstance()
ofSwift_Message
. - Atribuir o endereço de e-mail de envio (
From:
) comsetFrom()
ousetSender()
. - Atribuir o assunto com
setSubject()
. - Atribuir o endereço de e-mail que vai receber a mensagem com
setTo()
,setCc()
e/ousetBcc()
. - Atribuir o corpo da mensagem com
setBody()
. - Adicionar anexos com
attach()
.
Vamos criar um index.php e mostrar um envio de e-mail usando STMP:
//Criando a mensagem $message = \Swift_Message::newInstance(); //Assunto da mensagem $message->setSubject("Assunto da mensagem") //Quem está enviando ->setFrom( array( "[email protected]" => 'Fulano da Silva' ) ) //Quem irá receber ->setTo( array( '[email protected]' ) ) //Corpo da Mensagem ->setBody("Minha mensagem") //Inserindo anexos ->attach(\Swift_Attachment::fromPath('minha-imagem.jpg'));
Esta primeira parte é para criar a mensagem. Por isso esta biblioteca é importante, ela não mistura as coisas e/ou coloca as responsabilidades dentro de um só lugar, uma coisa é a mensagem e outra é o envio.
Vamos criar o transporte:
//Servidor que enviará o e-mail $transport->setHost('meuservidor.com.br') //porta SMTP ->setPort(465)//ou 587 //usuário ->setUsername('[email protected]') //senha ->setPassword('123456') //tipo de encriptação ->setEncryption('ssl') //método de autenticação ->setAuthMode('login');
Agora temos que criar o e-mail de fato e enviá-lo:
//Criando o e-mail com o transporte $mailer = \Swift_Mailer::newInstance($transport); //Enviando e-mail $mailer->send($message);
Pronto o e-mail está enviado. Agora vejamos alguns maçantes da biblioteca:
//Corpo da mensagem em HTML $message->setBody("Minha mensagem","text/html"); //Criar instância da mensagem já com assunto $message = \Swift_Message::newInstance("Meu assunto"); //Criar instância do transporte já com servidor e porta $transport = \Swift_SmtpTransport::newInstance("meuservidor.com.br",587);
- Considerações finais
É isso aí pessoal, espero que tenham gostado. Este é ponto que sempre venho “batendo”, trabalhem com orientação a objetos, procurem recursos existentes para reutilização de código e parem de ficar reinventando a roda. Exatamente, porque o PHP há anos atrás era procedural, há ainda algumas coisas que temos que usar desta maneira, mas isto está ficando para trás e vai ficar! Mostrei mais um exemplo de uma biblioteca orientada a objetos e estruturada, e, agora, para o envio de e-mails.
Veja o código-fonte deste post aqui.
Referências: