miércoles, 24 de marzo de 2010

SMTP con GMail sobre Joomla! 1.5.12: configuración

Hoy me he encontrado un error que a priori debería ser muy sencillo de resolver... hasta que van pasando los minutos y éstos se convierten en horas.

El objetivo

Configurar una cuenta de Google Mail en un portal sobre el gestor de contenidos Joomla! 1.5.12 para el envío de correo electrónico desde un formulario de contacto.

El problema

El formulario devuelve un "Error SMTP: No se puede conectar con el servidor SMTP". Finalmente se detectó que hay un problema de disponibilidad de los protocolos de seguridad (SSL o TLS) requeridos para la conexión SMTP a Google Mail.

Solución

Esta es la solución aplicada, en mi caso, encontrada en el foro JoomlaSpanish.org, tras una búsqueda por la red de diversas opciones.

Si tu servidor web es local deberías de abrir el puerto de sailda 465 ó 587 (y dependiendo del que abras, ese mismo indicarás en la configuración del servicio de correo en Joomla!).

Si tienes un servidor de alojamiento remoto, contratado en un servicio externo sobre un sistema LAMP (Apache y PHP), deberías de asegurarte que en Apache está activo el módulo SSL_module y cargadas las extensiones php_curl, php_openssl, php_smtp y php_pop3 para PHP.

En caso de un servidor propio en local debes descomentar las líneas que activan estos módulos. En este caso un sistema EasyPHP sobre un Windows Server.

Archivo de configuración Apache:
httpd.conf
[...]
LoadModule ssl_module modules/mod_ssl.so
[...]

Archivo de configuración PHP:
php.ini
[...]
; Windows Extensions
[...]
extension=php_curl.dll
extension=php_openssl.dll
extension=php_pop3.dll
extension=php_smtp.dll
[...]

En Joomla! debes activar la extensión Authentication - GMail, en la ruta del panel de control Extensiones » Gestor de plugins.

Y especificar en Joomla! la configuración del servidor de correo/SMTP, en la ruta del panel de control Configuración global » Servidor » Servidor de correo/SMTP los datos de la cuenta de Google Mail, tal cual se indican:

Programa de correo:Servidor SMTP
Dirección del remitente:[cuenta GMail]
Nombre del remitente:[un nombre]
Ruta para Sendmail:/usr/sbin/sendmail
Autenticacion SMTP:
SMTP Security:SSL
SMTP Port:465 [*]
Usuario SMTP:[cuenta de correo GMail, incluido @gmail.com]
Contraseña SMTP:[contraseña de la cuenta GMail]
Servidor SMTP:smtp.gmail.com

* En un servidor alojado en local, si el puerto abierto en el router es el 587 entonces debemos indicar aquí el puerto 587.

** Obviamente, se parte de la base que se dispone de cuenta en Google Mail y que se pretende usar desde Joomla!

Configurar servidor correo/SMTP Joomla!

9 comentarios:

Julio dijo...

Interesante; yo uso php para el correo en joomla, pero sí que tiene esa opción que podría configurar. Me lo apunto por si un día cambio a una cuenta de gmail, ¡un abrazo!

Anónimo dijo...

muchas gracias !!! finalmente funciona!!

Angel Cabrera dijo...

encantado de ser de ayuda! :)

Fabian dijo...

Master, por fin pude enviar un mail a traves del formulario de Contactos de Joomla con los consejos que das en esta post, la única diferencia que yo solo habilité 2 librerias de PHP, la:
extension=php_curl.dll
extension=php_openssl.dll

Con ambas funciona de maravilla el envío usando Gmail.

Saludos y nuevamente gracias por la luz.

Atte.
Fabian Donoso
Stgo - Chile

Angel Cabrera dijo...

Encantado de ser útil Fabian :)

house dijo...

Buenos datos!, conocen algun hosting gratis que permita envio smtp para usar con joomla?, se que es pedir mucho pero no puedo pagar aún, por lo menos por el primer año.
Gracias de antemano!

Angel Cabrera dijo...

No se me ocurre ninguno para recomendarte. Además, que tu hosting tenga filtrado la conexión SMTP a servidores remotos, no alojados dentro de su propia red, es algo que no suelen nunca informar sino algo que te encuentras luego de contratar y hacer las primeras pruebas. Cualquier que sea la opción que escojas, pregúntalo primero y asegúrate, no te vayas a llevar una sorpresa.

Angel Cabrera dijo...

En caso de usar servidor SMTP propio casi siempre tengo que cambiar la línea:

$mail->setSender( array( $email, $name ) );

Por las líneas:

$mail->setSender( array( $MailFrom, $name ) );
$mail->addReplyTo( array( $email, $name ) );

En:

./components/com_contact/controller.php

¡No olvidar! Que cada vez que me pasa tengo que volver a buscar la solución. ¡Argh! :)

Anónimo dijo...

buen tutorial gracias ;)