Hoy en el trabajo he necesitado crear un componente para enviar correos electrónicos.
Allí usamos Joomla 1.5 como CMS, así que lo primero que he hecho a sido ir a la página de documentación oficial de Joomla a buscar documentación.
La versión 1.5 acaba de salir, por lo tanto no hay mucha documentación, así que no he encontrado nada.
Después he pensado… pero si Joomla lleva un componente para enviar correos… ¿Cómo lo habrán hecho?
Menos mal, que Joomla es open source y me permite ver como esta hecho por dentro. Me he metido a ver el componente “com_massmail” que lleva instalado Joomla de serie y que posibilita enviar correos masivos.
Este es el código de mi componente :
function sendMail(){
$mailer =& JFactory::getMailer();
$sender = JRequest::getVar('email');
$nombre = JRequest::getVar('nombre');
$apellidos = JRequest::getVar('apellidos');
$fromname = $nombre . " " . $apellidos ;
$asunto = "NUEVO CLIENTE INTERESADO : ". $fromname;
$body = JRequest::getVar('comentarios');
$mailer->setSender(array($sender, $fromname));
$mailer->setSubject($asunto);
$mailer->setBody($body);
$mailer->IsHTML(0);
// Add recipients
$mailer->addRecipient("atencionClientes@empresa.com");
// Send the Mail
$rs = $mailer->Send();
if ( JError::isError($rs) ) {
$msg = $rs->getError();
$this->setRedirect( "index.php?option=com_miComponente&view=contacto" , $msg);
} else {
$msg = "Mensaje enviado correctamente. Pronto nos pondremos en contacto usted.";
$this->setRedirect("index.php",$msg);
}
}
Lo que tiene que hacer el componente es recibir unos datos del cliente que se ha interesado por el producto y así como la información que ha rellenado en el formulario, y enviarlo por correo a la cuenta de la empresa destinada a atender a los clientes.
El formulario se envía al task sendMail.
Se obtiene el objeto mailer mediante la clase JFactory y después mediante JRequest::getVar() se obtienen los datos del formulario.
Después, mediante lso metodos setSender, setSubject y setBody se establecen el remitente, el asunto y el cuerpo del mensaje respectivamente.
Con $mailer->IsHTML(0) se especifica que el correo se envía son formato HTML.
Por último mediante addRecipients se introduce el destinatario, que en este caso es una cuenta de correo dedicada para la atención de los clientes.
El método addRecipient se puede usar tantas veces como destinatarios haya, es decir, se puede hacer una consulta a la base de datos, obtener las cuentas de todos los usuarios y enviar el correo a todos los usuarios, recorriendo el recordset con un foreach y añadiendo un addRecipient en cada pasada de bucle.
Finalmente se ejecuta el método $mailer->Send(); que envía el correo a todos los destinatarios.
Al final del todo se muestra una vista u otra según si ha resultado error o no el envío del correo: si da error se envía otra vez al formulario de contacto, y si no ha dado error , se envía a la página principal, y se muestra un mensaje de confirmación.