Como enviar un Correo usando Symfony 2.3.6


El envío de mensajes de correo electrónico es una tarea clásica para cualquier aplicación web y que tiene complicaciones especiales y
peligros potenciales. En lugar de volver a crear la rueda, una solución para enviar mensajes de correo electrónico es utilizar el
SwiftmailerBundle, que aprovecha la potencia de la libreria Swiftmailer.

No olvides habilitar el bundle en el kernel antes de usarlo

public function registerBundles()
{
    $bundles = array(
    // ...
    new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
    );
    // ...
}  

Configuración

Antes de utilizar SwiftMailer, asegúrese de incluir su configuración. La única configuración obligatoria
parámetro es el transport:

# app/config/config.yml
    swiftmailer:
        transport: smtp
        encryption: ssl
        auth_mode: login
        host: smtp.gmail.com
        username: tu_usuario_gmail
        password: tu_clave_gmail

La mayoría de la configuración SwiftMailer trata de cómo los mensajes mismos deberían ser
entregado. Los siguientes atributos de configuración están disponibles:

  • transport (smtp, mail, sendmail, o gmail)
  • username
  • password
  • host
  • port
  • encryption (tls o ssl)
  • auth_mode (plain, login, o cram-md5)
  • spool
    • type (como se encolan los mensajes, son soportados dos tipos archivo y memoria)
    • path (donde son almacenados los mensajes)
  • delivery_address (una direccion de correo donde se envian todos los correos)
  • disable_delivery (establecer como verdadero para desabilitar completamente la entrega)

Enviando Correos

La biblioteca SwiftMailer funciona mediante la creación, configuración y envío de objetos Swift_Message. el
mailer es responsable de la entrega real del mensaje y se puede acceder a través del servicio de correo.
En general, el envío de un correo electrónico es muy sencillo:

public function indexAction($nombre)
{
    $mensaje = \Swift_Message::newInstance()
        ->setSubject('Hola')
        ->setFrom('miempresa@ejemplo.com')
        ->setTo('destinatario@ejemplo.com')
        ->setBody(
            $this->renderView(
                'HolaBundle:Hola:email.txt.twig',
                array('name' => $nombre)
            )
        )
    ;
    $this->get('mailer')->send($mensaje);
    return $this->render(...);
}

Para mantener las cosas disociadas, el cuerpo del correo electrónico se ha guardado en una plantilla y rendido con la
método renderView().
El objeto de $mensaje soporta muchas más opciones, como la inclusión de anexos, agregado de contenido HTML, y mucho más.

Como usar Gmail para enviar correos

Durante el proceso de desarrollo, en ves de usar un servidor smtp regular para enviar correos, encontraras que es mucho mas facil y practico el uso de Gmail como servicio de correo. El bundle Swiftmailer hace que esto sea realmente sensillo

En ves de usar una cuenta de correo regular, recomendamos la creación de una cuenta especial para su aplicacion web

En el fichero de la configuracion de desarrollo, cambiar el parametro transport a gmail y establecer username y password con las credenciales de la cuenta de gmail creada

# app/config/config_dev.yml
    swiftmailer:
        transport: gmail
        username: tu_usuario_gmail
        password: tu_clave_gmail

Si estas usando la versión estandar de Symfony configure los parametros en el fichero parameters.yml

# app/config/parameters.yml
    parameters:
        ...
        mailer_transport: gmail
        mailer_host: ~
        mailer_user: tu_usuario_gmail
        mailer_password: tu_contraseña_gmail

Concluyendo…

Espero que te haya servido de algo esta sensilla explicación de como enviar correos con Symfony 2.3.6, y que hayas aprendido siempre algo nuevo con nosotros. Recuerda siempre dejarnos tus comentarios en Disqus, Twitter o Facebook y así poder retroalimentar nuestros conocimientos. Hasta la próxima.