Hasta hace bien poco symfony no tenía ninguna librería oficial para el envío de emails. Esto quedó bien claro en el tutorial de Jobeet en que nos enseñaron a enviar emails utilizando una de los componentes del Zend Framework, Zend_Mail.

Parece ser que esta situación ha cambiado, recientemente Fabien Potencier anunció en su blog que pasaba a ser el nuevo project manager de Swift y que, por supuesto, harían todo lo posible para la librería se integrase lo mejor posible con symfony.

Mientras que el equipo de symfony decide cual es la forma “idónea” de integrar Swift en symfony, ésta ha sido mi manera de hacerlo.

Instalando Swift Mailer

  • El primer paso es descargar Swift Mailer de su página web. En el momento de escribir este post la versión actual es la 4.0.5.
  • Creamos una carpeta, /sf_root/lib/vendor/swift/ y copiamos todos los archivos descargados dentro.
  • A continuación necesitamos indicarle a symfony que cargue las nuevas clases, para ello utilizamos el autoloader del propio Swift, así:
    config/ProjectConfiguration.class.php
     
    <?php
    // Autoload swift core
    require_once dirname(__FILE__).'/../lib/vendor/Swift/lib/swift_required.php';
     
    // Autoload symfony core
    require_once dirname(__FILE__).'/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php';
    sfCoreAutoload::register();
    ?>

Enviando un email

Una vez instalado Swift Mailer, envíar un email es bastante sencillo. Basta con el siguiente código en cualquiera de tus acciones:

actions.class.php
 
<?php
// Creamos el transport, nativamente Swift trae tres: Mail, SendMail y SMTP
$transport = Swift_MailTransport::newInstance();
 
// Creamos el email utilizando el transport anterior
$mailer = Swift_Mailer::newInstance($transport);
 
// Creamos el mensaje
$message = Swift_Message::newInstance('Wonderful Subject')
  ->setFrom(array('john@doe.com' => 'John Doe'))
  ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name'))
  ->setBody('Here is the message itself')
  ;
 
// Enviamos el mensaje
$result = $mailer->send($message);
?>

Puedes echarle un vistazo a su guía rápida para el envío de emails para ver este mismo ejemplo y algún otro.

Enviando emails con Gmail y Swift

Para acabar, si lo que queremos es utilizar Gmail como nuestro servidor SMTP lo único que habrá que hacer es cambiar el objeto transport del código anterior,

actions.class.php
<?php
$transport = Swift_SmtpTransport::newInstance('ssl://smtp.googlemail.com', 465)
                    ->setUsername('myuser@gmail.com')
                    ->setPassword('mypass');
?>

Compártelo:
  • Print this article!
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Ping.fm
  • RSS
  • Twitter