Enviar correo electrónico con el API de Joomla 1.5
Frameworks, Joomla, Programación
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.
Me llamo David Noguera, tengo 23 años y soy Desarrollador/Administrador web.
Puedes encontrar algo más de información en la página
5 de marzo del 2008 a las 4:33 pm
is there any one who knows any source about this subject in other languages?
19 de marzo del 2009 a las 9:28 am
Perdón, me marca error al querer redireccionar ($this->setRedirect), hará falta incluir alguna librería???
25 de marzo del 2009 a las 8:46 am
Muchas Gracias, tu busqueda y tu solucion me arreglo el dia. Anda de maravillas
Saludines
25 de marzo del 2009 a las 9:00 am
Torres: Esa parte la podes crear a tu gusto . Son solo los mensajes de verificacion si envia o no. Pero vas a ver que el mail te llega que es lo importante. Saludos.
13 de mayo del 2009 a las 3:38 am
funciona, al parecer, todo bien… pero no me llegan los correos.
probé cambiando en configuraciones globales cambiar el MTA a Sendmail, y tampoco.
19 de mayo del 2009 a las 1:37 pm
hola. soy pricipiante y si me sirvio la aplicación en un sitio de prueba local, pero lo que ahora no se es como instalar el componente en jumla de forma correcta,pues en el menu del administracion no queda bien y ademas poder enlasar unos items de un menu a mi componente.
Se que talves es mucho preguntar pero no saben cuanto se los agradeseceria.
28 de mayo del 2009 a las 11:21 am
solucionado… la cuenta de correo que utilizaba era de GMail.
GMail o Google, es cosa seria con el correo sin remitente explícito… asi que me los anulaba todos..
Lo que hice fué utilizar la conexion segura con SMTP y todo anda a la perfección.
27 de junio del 2009 a las 4:00 pm
Me da el siguiente error
Fatal error: Class ‘JFactory’ not found in /home/….
Que puede ser
Lo estoy aplicando en el plug-in Jumi y en un archivo externo php.
Tal vez alla que incluir algun archivo de joomla
Gracias
29 de junio del 2009 a las 2:11 am
Pues por lo que tengo entendido el plugin Jumi carga el framework de Joomla con normalidad, así que no se que puede estar pasandote…
10 de diciembre del 2009 a las 8:55 pm
$mailer->setSender(array(‘no-reply@sincorreo.cl’,'Kuroro’));
$mailer->setSubject($asunto);
$mailer->setBody(implode(“\n”, $body));
$mailer->IsHTML(0);
$mailer->addRecipient(“kuroro@sincorreo.cl”);
$mailer->AddCC(“luzbell@sincorreo.cl”);
$mailer->AddBCC(“fernando@sincorreo.cl”);
$rs= $mailer->Send();
mi codigo funciona bien, envia los correos al recipiente que es kuroro@sincorreo.cl, al con copia oculta que es fernando@sincorreo.cl pero al con copia, no le llega. puedes ayudarme con eso por favor.
8 de enero del 2010 a las 8:06 pm
Hola, excelente manual, y muchas gracias por compartirlo con el mundo, ha sido de gran ayuda muy instructivo y didactico, felicidades.