Envio de e-mails usando Swift Mailer a través de Symfony.
Una de las mejores soluciones PHP de correo es sin duda Swift Mailer, que como ya mencionamos en un post anterior, ya viene integrada con las últimas versiones de Symfony 1.3 y 1.4.
Enviar un email es tan simple como se puede ver a continuación:
<?php public function executeSendEmail() { $this->getMailer()->composeAndSend('from@example.com', 'to@example.com', 'Subject', 'Body'); } ?>
O bien, puedes optar por componer el mensaje y luego enviarlo con el método Send():
<?php public function executeSendEmail() { $this->getMailer()->compose('from@example.com', 'to@example.com', 'Subject', 'Body'); $this->getMailer()->send(); } ?>
Ahora bien, si necesitar hacer algo un poquito más complejo como adjuntar un archivo al email, es tán fácil como se ve a continuación:
<?php public function executeSendEmail() { $this->getMailer()->compose('from@example.com', 'to@example.com', 'Subject', 'Body')->attach(
Swift_Attachment::fromPath('/path/to/a/file.zip')); $this->getMailer()->send(); } ?>
Como podemos observar en los métodos anteriores Symfony maneja las cuestiones de mailing con un objeto mailer, el cual es obtenido desde la acción con el método getMailer(), esto debido a que el objeto mailer ya forma parte del núcleo del framework.
Configuración
Por defecto, el método send() intenta usar el servidor local SMTP para el envio del mensaje al destinatario. Por supuesto, como muchas cosas en Symfony, esto es totalmente configurable.
Como menciones anteriormente el objeto mailer forma parte del núcleo de Symfony. Estos objetos son automáticamente creados, configurados, y gestionados por el framework. Ellos son siempre accesibles desde el objeto sfContext, y como muchas cosas del framework, ellas son configurables via un archivo de configuración: factories.yml. El cual a su vez es configurable por entorno.
Al ser un objeto del núcleo, el mailer es un factory. Y por eso, este es configurado en el archivo de configuración factories.yml. La configuración por defecto se lee asi:
mailer: class: sfMailer param: logging: %SF_LOGGING_ENABLED% charset: %SF_CHARSET% delivery_strategy: realtime transport: class: Swift_SmtpTransport param: host: localhost port: 25 encryption: ~ username: ~ password: ~
Cuando se crea una nueva aplicación, el archivo de configuración factories.yml sobreescribe la configuración predeterminada con algunos sensibles valores para los entornos env y test:
test: mailer: param: delivery_strategy: none
dev: mailer: param: delivery_strategy: none
La opción de configuración delivery_strategy le dice al framework como entregar los correos. Por defecto, Symfony viene con cuatro diferentes estrategias:
- realtime: Los Mensajes son entregados en tiempo real.
- single_address: Los Mensajes son entregados a una solo dirección.
- spool: Los Mensajes son guardados en cola.
- none: Los Mensajes son simplemente ignorados.
No importa cual sea la estrategia, los emails son siempre registrados en el log y estan disponibles en el panel "mailer" del web debug toolbar.
Mail Transport
Los emails siempre son enviados a través de un transport. El transport es configurado en el archivo de configuración factories.yml, y la configuración por defecto usa el servidor SMTP del equipo local:
transport: class: Swift_SmtpTransport param: host: localhost port: 25 encryption: ~ username: ~ password: ~
Swift Mailer viene con tres clases transport diferentes:
-
Swift_SmtpTransport: Usa un servidor SMTP para enviar los mensajes. -
Swift_SendmailTransport: Usasendmailpara enviar los mensajes. -
Swift_MailTransport: Usa la función nativa de PHPmail()para enviar los mensajes.
La sección Transport Types de la documentación oficial Swift Mailer describe todo lo que necesitas saber acerca de las clases transport y sus diferentes parámetros.
Fuente: Symfony project


0 Comentario