Louder Developer Zone
Articles, Tutorials and Tips from the community and Louder developers

Envio de correos en Kumbia Enterprise con Gmail

Publish at Thursday, March 11, 2010
By Core Developers - Louder

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.

Enlaces Externos

Tell friends about this article on social networks:



blog comments powered by Disqus

Previous: Compatibilidad con JQuery, MooTools, ExtCore y Prototype en Kumbia Enterprise Next: Introducción al componente Linguistics

Colaborate

Colaborate

We invite you to submit articles and tutorials to the Developer Zone.

Archive

  • Mayo 2009

Maybe you are interested

Added value to your Business.

Become a Solution Partner Louder Now.

Bring to the Open-Source retroactively..

Learn more about Shared Louder Labs