PHP

Enviando emails no PHP utilizando o Swift Mailer

Por em

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?

  1. Instalar o Composer
  2. Como usar o Swift Mailer
  3. Considerações finais. 

Passos

  1. Instalar o Composer.

Confira aqui como instalar o Composer.

  1. 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() of Swift_Message.
  • Atribuir o endereço de e-mail de envio (From:) com setFrom() ou setSender().
  • Atribuir o assunto com setSubject().
  • Atribuir o endereço de e-mail que vai receber a mensagem com setTo(), setCc() e/ou setBcc().
  • 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);
  1. 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:

http://swiftmailer.org/