El envío de correo electrónico es una tarea clásica para cualquier aplicación web, y la cual tiene complicaciones especiales y peligros potenciales. En lugar de reinventar la rueda, una solución para enviar mensajes de correo electrónico es usando el SwiftmailerBundle, el cual aprovecha el poder de la biblioteca SwiftMailer.
Nota
No olvides activar el paquete en tu núcleo antes de usarlo:
public function registerBundles()
{
$bundles = array(
// ...
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
);
// ...
}
Antes de usar SwiftMailer, asegúrate de incluir su configuración. El único parámetro de configuración obligatorio es transport:
# app/config/config.yml
swiftmailer:
transport: smtp
encryption: ssl
auth_mode: login
host: smtp.gmail.com
username: your_username
password: your_password
<!-- app/config/config.xml -->
<!--
xmlns:swiftmailer="http://symfony.com/schema/dic/swiftmailer"
http://symfony.com/schema/dic/swiftmailer http://symfony.com/schema/dic/swiftmailer/swiftmailer-1.0.xsd
-->
<swiftmailer:config
transport="smtp"
encryption="ssl"
auth-mode="login"
host="smtp.gmail.com"
username="your_username"
password="your_password" />
// app/config/config.php
$container->loadFromExtension('swiftmailer', array(
'transport' => "smtp",
'encryption' => "ssl",
'auth_mode' => "login",
'host' => "smtp.gmail.com",
'username' => "your_username",
'password' => "your_password",
));
La mayoría de los atributos de configuración de SwiftMailer tratan con la forma en que se deben entregar los mensajes.
Los atributos de configuración disponibles son los siguientes:
La biblioteca SwiftMailer trabaja creando, configurando y luego enviando objetos Swift_Message. El «mailer» es responsable de la entrega real del mensaje y es accesible a través del servicio mailer. En general, el envío de un correo electrónico es bastante sencillo:
public function indexAction($name)
{
$message = \Swift_Message::newInstance()
->setSubject('Hello Email')
->setFrom('send@example.com')
->setTo('recipient@example.com')
->setBody(
$this->renderView(
'HelloBundle:Hello:email.txt.twig',
array('name' => $name)
)
)
;
$this->get('mailer')->send($message);
return $this->render(...);
}
Para mantener las cosas disociadas, el cuerpo del correo electrónico se ha almacenado en una plantilla y reproducido con el método RenderView().
El objeto $message admite muchas más opciones, como incluir archivos adjuntos, agregar contenido HTML, y mucho más. Afortunadamente, SwiftMailer cubre el tema con gran detalle en Creando mensajes de su documentación.
Truco
Hay disponibles varios artículos en el recetario relacionados con el envío de mensajes de correo electrónico en Symfony2: