viernes, 30 de abril de 2010

Drupal: Mandar correos con PHPMailer

Mandar correos electrónicos tras realizar una operación es algo bastante común en cualquier aplicación informática. En Drupal no es una excepción, pero muchas veces tendremos problemas con la configuración PHP de nuestro servidor. Muchos servidores gratuitos deshabilitan la función mail() que envía correos vía PHP para evitar el spam.

Nosotros para superar esta complicación usaremos PHPMailer, un módulo desarrollado para Drupal que nos facilitará el envío de correos electrónicos.

Para empezar nos descargamos la versión para Drupal de PHPMailer. Extraemos la carpeta y observaremos que dentro de ella existe otra carpeta llamada "phpmailer". En esa carpeta debemos añadir los ficheros class.phpmailer.php, class.smtp.php y class.pop3.php que se encuentran en la implementación de la clase PHPMailer que se puede descargar aquí (descargar PHPMailer_v5.1.tar.gz).

Una vez hemos completado la descarga del módulo lo añadimos en %ROOT_SITIO%/sites/all/module.

Accedemos a nuestra distribución de Drupal y accedemos a Administer -> Site Building -> Modules y habilitamos el PHPMailer.

Marchamos a la configuración del módulo y activamos la casilla de enviar correos usando PHPMailer y completamos (ejemplo para usar SMTP de Gmail):

General

Primary SMTP server: smtp.gmail.com
SMTP Port: 465
Use Secure Protocol: SSL

SMTP Autenticathion

Username: Tu cuenta de gmail (incluyendo "gmail.com")
Password: Tu password

En Advanced SMTP Settings sólo es necesario añadir el nombre del que envía el correo y en Test Configuration se añaden los correos para enviar los email de prueba.

Salvamos la configuración y se enviará el correo de prueba.

Sin embargo, si estás usando un Apache Local puede que tengas un problema. No puedes elegir en "Use Secure Protocol" otra opción que no sea "No" y eso impide enviar correos por SMTP desde Gmail, Hotmail, ...

Debes acceder a dos archivos:

1.- El httpd.conf de nuestro servidor Apache en el que se debe descomentar la siguiente línea


LoadModule ssl_module modules/mod_ssl.so


2.- El php.ini donde deberemos descomentar la siguiente línea


extension=php_openssl.dll


Ahora el desplegable de Protocolos debería tener: No, SSL y TLS.