Una tarea muy común en una aplicación Web es enviar correos electrónicos confirmando operaciones ó dando
alguna información importante.
Kumbia Enterprise Framework KEF incluye en su distribución estándar una librería de envío de correos llamada
SwiftMailer. Esta librería fue escogida gracias a que es completamente
orientada a objetos, cumple con estándares y soporta cualquier tipo de transporte (SMTP, sendmail, postfix).
En este tutorial mostraremos como realizar el envío de un correo usando KEF mediante una cuenta de Gmail.
Cargar SwiftMailer
Es posible cargar Swift de 2 formas. La primera como una extensión de terceros en boot.ini y la segunda
directamente cuando se necesite hacer el envío. Se debe usar la primera cuando sea muy común para la aplicación
realizar envíos y se requiera que este siempre presente. Si no es el caso, es mejor utilizar
la segunda estrategia.
Cargar como una extensión
Al config/boot.ini se debe agregar Swift.Swift a la variable extensions así:
[modules]
extensions = Swift.Swift
Cargar en "caliente"
Se usa la función Core::importFromLibrary para incluir los archivos desde el directorio de extensiones
de terceros de manera transparente:
#Cargar Swift
Core::importFromLibrary("Swift", "Swift.php");
#Cargar transporte por SMTP
Core::importFromLibrary("Swift", "Swift/Connection/SMTP.php");
Configuración de Gmail
Para aprovechar los servidores de Google para realizar el envio del correo, se procede
a configurar una cuenta existente. La cuenta debe tener habilitado correo POP3 en las opciones de esta.
Al activar el POP3 se activa el SMTP que es lo que necesitamos.
Componer el mensaje
Swift permite el envió de correos en texto plano y html. Para el ejemplo vamos a crear un correo html con un adjunto:
<?php
class CorreosController extends ApplicationController {
public function envioAction(){
try {
#Importar SwiftMailer
Core::importFromLibrary("Swift", "Swift.php");
Core::importFromLibrary("Swift", "Swift/Connection/SMTP.php");
#Este es el cuerpo del mensaje en HTML
$cuerpoMensaje = "<h1>Gracias por Registrarse</h1>";
$cuerpoMensaje.= "<p>Este es un mensaje de agradecimiento</p>";
# El constructor recibe el asunto del mensaje
$message = new Swift_Message("Gracias!");
#Una parte del mensaje es el cuerpo en HTML
$bodyMessage = new Swift_Message_Part($cuerpoMensaje, "text/html");
#El mensaje está en codificación UTF-8
$bodyMessage->setCharset("UTF-8");
#Agregamos el cuerpo al mensaje
$message->attach($bodyMessage);
//Leemos el adjunto y lo agregamos al mensaje
$data = file_get_contents("public/img/una-foto.jpg");
$attachment = new Swift_Message_Attachment("una-foto.jpg");
$message->attach($attachment);
//Creamos una lista de Destinatarios
$recipients = new Swift_RecipientList();
//Asignamos cada uno de los Destinatarios
$recipients->addTo("carolina.arias@loudertecnology.com", "Carolina Arias");
$recipients->addTo("juan.perez@yahoo.com", "Juan Perez");
//Hacemos la conexión a Gmail
$smtp = new Swift_Connection_SMTP("smtp.gmail.com", Swift_Connection_SMTP::PORT_SECURE, Swift_Connection_SMTP::ENC_TLS);
$smtp->setUsername("nuestra-cuenta@gmail.com");
$smtp->setPassword("nuestra-clave");
//Enviamos el mensaje indicando quien lo envia
$swift = new Swift($smtp);
$swift->send($message, $recipients, new Swift_Address("nuestra-cuenta@gmail.com", "nuestro-nombre"));
}
catch(Exception $e){
//Sucedio alguna excepción?
echo $e;
}
}
}
Algunas Consideraciones
Como se pudo ver en el ejemplo los adjuntos son leidos a memoria para ser procesados y adjuntados en el mensaje.
Hay que tener en cuenta que estos archivos deben ser inferiores al tamaño máximo permitido por Gmail y el correo destino.
Conclusiones
El envío de correos en Kumbia Enterprise es una tarea sencilla gracias a la poderosa libreria SwiftMailer y
su integración con el framework.