jueves, 16 de diciembre de 2010

Cakephp: Swift Mailer Component


Requisitos:
  • Windows XP, o Linux
  • Apache 2 instalado
  • PHP 5.2 instalado (extension openssl para SSL o TLS)
  • CakePhp 1.2, instalado
  • MySQL 5, opcional
Objetivo:

Implementar un mecanismo para el envio de email (Sin CakeMailer).


Instalación:

  1. Desacargar SwiftMailer y copiarlo en /app/vendors/swift_mailer
  2. Copiar este componente a /app/controllers/components/swift_mailer.php

Uso:

Ubicar la libreria...

La carpeta vendors debería tener este aspecto:



Crear los layouts...

Para que el componente funcione correctamente se debe de crear un layout por defecto (default.ctp) para los emails: html y text. Estos últimos deben de estar ubicados en la carpeta /app/views/layouts/email/.

La carpeta de los layouts debería tener este aspecto: (Ej. default.ctp)



Crear las vistas...

Para el contenido de los emails se necesitarán plantillas, los cuales deben de estar ubicados en la carpeta /app/views/elements/email/.

La carpeta de las plantillas del contenido del email debería tener este aspecto: (Ej. default.ctp)



En el controlador...

class TestsController extends AppController {
var $name = 'Tests';
var $helpers = array('Html');
var $components = array('SwiftMailer');
var $uses = null;

function testEmail() {
// se configuran los datos del email
$datos = array(
'nombre' => 'Cake User',
'asunto' => 'Email Test',
'mensaje' => 'Body Message'
);
$asunto = 'Email Test';
$destinatario = 'test@test.com';
$plantilla = "default";

// se configuran los parametros SMTP
$this->SwiftMailer->smtpHost = "mail.myhost.com";
$this->SwiftMailer->smtpPort = 25;
$this->SwiftMailer->smtpUsername = test@myhost.com;
$this->SwiftMailer->smtpPassword = "mypassword";

// se configuran los parametros de envio
$this->SwiftMailer->sendAs = 'html';
$this->SwiftMailer->from = "test@gmail.com";
$this->SwiftMailer->fromName = "Swift Mailer";
$this->SwiftMailer->to = $destinatario;
$this->SwiftMailer->replyTo = "replayto@gmail.com";
$this->SwiftMailer->bcc = array('bcc@host.com');

// se obtiene la fecha actual
$fechaHoraActual = date('d-m-Y H:i:s');

// se envian los parametros necesarios a la vista
$this->set('datos', $datos);
$this->set('fechaHoraActual', $fechaHoraActual);

try {
$exito = $this->SwiftMailer->send('default', $asunto);
if(!$exito) {
$this->log("Error sending email");
}
} catch(Exception $e) {
$this->log("Failed to send email: ".$e->getMessage());
$exito = false;
}

if(!$exito) {
$this->Session->setFlash('El email no pudo ser enviado.', 'default', array('class' => 'error'));
return false;
}

$this->Session->setFlash('El email fue enviado con exito.', 'default', array('class' => 'success'));
return true;
}
}

Listo!!!


Enlace Original:

- http://bakery.cakephp.org/articles/sky_l3ppard/2009/11/07/updated-swiftmailer-4-xx-component-with-attachments-and-plugins

No hay comentarios:

Publicar un comentario

Las + Populares