Drupal y el correo electrónico

Es increíble como algo tan instaurado como un correo electrónico sea tan complejo de configurar y mantener por cuenta propia.

Y si esto que digo suena raro probablemente sea porque no tuvieron que enfrentarse con la necesidad de configurar un servidor de correo electrónico y hacer que funcione bien y no sea inundado por el spam.

Cuando trabajamos con Drupal a menudo necesitamos integrarlo con el correo electrónico, este artículo recorre las distintas alternativas sin entrar en las profundidades del mundo del email, pero si querés enviar, recibir o registrar los mensajes entrantes y salientes de correo electrónico desde tu sitio, este artículo va a interesarte.

El problema principal.

El Spam señores, el Spam es la raíz de todos los males en el mundo del email. Matemáticamente hablando el spam tiene éxito porque en diez millones de receptores, que un uno por ciento acuse recibo y responda ya es negocio...

Cientos de miles de dólares se han invertido en desarrollos contra el Spam, si optamos por instalar nuestro propio servidor de correo electrónico para enviar e-mails tenemos que ser conscientes que tanto los correos salientes, como los entrantes pueden ser considerados (o no cuando deberían serlo) como spam. Nuestro servidor podría caer en las llamadas listas negras, que son básicamente un conjunto de direcciones de e-mail que los demás proveedores de correo usan para determinar si algo es o no spam, y si caemos ahí dentro, es muy difícil, por no decir imposible, salir.

Por esa razón vamos a intentar utilizar cosas que funcionan bien, como Gmail. Para aquellos que tengan mucho pelo por perder y quieran intentar configurar su propio servidor de correo, busquen en in ter net.

Nivel uno: Formularios de contacto

Comencemos con el caso de uso por excelencia, necesitamos una forma de que a través de de nuestro sitio puedan enviarnos mensajes de correo electrónico. El típico Formulario de Contacto.

No pude encontrar el origen de los formularios de contacto en Internet, pero estimo que surgió como una solución natural para evitar que al publicar con casilla de correo en una página esta fuese automáticamente bombardeada por correo masivo. Además muchas veces es más cómodo que iniciar sesión, redactar el e-mail, enviarlo y cerrar sesión.

Drupal trae en su núcleo un módulo llamado Contact, para la mayoría de los casos con instalar Contact ya tenemos nuestro formulario. Es importante configurar sus permisos para que todos los usuarios que nos interesan puedan hacer uso de el. Cuando permitimos que los visitantes anónimos envíen correos es de mucha utilidad combinar el módulo Contact con algún módulo anti Spam, como Captcha, Re-Captach, Riddler, Mollom, HoneyPot o AntiSpam según nuestro nivel de popularidad en la web y la cantidad de visitas y tipos de visitantes que tengamos. Hace un tiempo escribí también sobre soluciones mixtas contra el Spam.

Servidor de correo funcionando

Algo que no está del todo claro, especialmente para las personas que instalan Drupal por primera vez, o que se dedican a otra cosa que no sea propiamente la informática, es que para que el formulario de contacto funcione, el servidor en donde corre el sitio debe ser capaz de enviar correos. Y aunque parezca una obviedad, no siempre nuestro servidor (Hosting si quieren llamarlo), tiene la capacidad de enviar correos.

Algunos servicios de Hosting, especialmente los más económicos, proveen sistemas de envíos de e-mail desde IPs que se encuentran en listas negras, ¿La consecuencia de esto? Todos los e-mails que recibimos desde nuestro sitio caen en la carpeta de spam.

En el otro extremo. Hay gente que optan por contratar un VPS se encuentran con que tienen que configurar su propio servidor de correo.

Delegando el envío de correos en un proveedor externo

Como mencioné al principio del artículo, vamos a evitar complicarnos la vida y a utilizar algo que funciona. Estoy hablando de Gmail (Gmail no auspicia este artículo :) ). Seguramente haya otros proveedores que permitan hacer lo mismo, pero con Gmail sé que funciona porque lo he usado y puedo explicar el proceso completo.

Para poder enviar correos con Gmail necesitamos dos cosas. Primero, una cuenta de correo electrónico manejado por Gmail (o las cuentas de corporativas manejadas por Google) y segundo una biblioteca de PHP que permita enviar correos utilizando SMTP.

Para la segunda cuestión en Drupal tenemos dos módulos, SMTP y PHPMailer. Los dos módulos utilizan la biblioteca PHP Mailer que se encarga de enviar correos desde PHP.

Luego de instalar alguno de los dos módulos, supongamos que optamos por PHPMailer, que requiere además del módulo Libraries, vamos a poder indicar una cuenta de correo que se utilizará para los e-mails que salgan desde nuestro sitio.

¿Como funcionan estos módulos? Básicamente interceptan el proceso de envíos de e-mails de Drupal y le dicen que en vez de usar el servidor de correo que esté instalado en el servidor del sitio, use otro que nosotros le especificamos, con las credenciales que hayamos especificado.

El problema de la autenticación de dos pasos

Con el avance de Internet y la importancia de la seguridad en la web muchos proveedores de servios web como Google, Facebook, Twitter, etc. buscaron la forma de minimizar accesos no autorizados a los servicios que brindan.

Si enviamos un correo electrónico desde España, y a los tres minutos intentamos acceder a esa misma cuenta desde Uruguay, algo raro debe estar pasando. Si tenemos activado el método de autenticación de dos pasos, Gmail nos enviará un mensaje de texto con un código para que validemos que somos los dueños de la cuenta. Allá donde esté tu móvil, allá estarás tú...

Y acá muchos habrán dicho, ...¡Con razón!, mi sitio, que está en un servidor de otro país, no envía e-mails porque falla la autenticación en dos pasos. Por fortuna, Gmail ofrece las contraseñas de aplicación para lidiar con estos casos.

La contraseña de aplicación es simplemente una clave que genera el servidor para que usemos como contraseña alternativa en otras aplicaciones que no sean nuestra computadora principal.

Luego de conseguir nuestra contraseña de aplicación de Gmail siguiendo estas instrucciones, podemos configurar PHPMailer para que use esa clave en vez de nuestra contraseña principal, y problema arreglado.

Formulario de configuración del módulo PHPMailer

Nivel 2: Agregando campos extra a nuestro formulario de contacto

Si lo que buscamos es incorporar información extra a nuestro formulario, como nuevos campos o simplemente varios formularios de contacto, el módulo Contact no nos va a servir. Salvo, que estemos usando ya Drupal 8, en cuyo caso si es posible porque los formularios son entidades y se les pueden agregar campos.

Pero ya sea porque aún no estas usando Drupal ocho (porque al momento de escribir esto aún está en pañales) o porque necesites más flexibilidad, la opción recomendada es el módulo Webform.

Webform permite generar formularios simples, con muchos campos. Es altamente configurable y tiene incluida la opción de enviar un correo electrónico con el contenido de los campos completados una vez que se envía el formulario permitiendo incluso especificar plantillas para el correo electrónico enviado.

Otra ventaja que tiene Webform sobre Contact, es que permite crear múltiples formularios de contacto, cada uno con su propia URL y su propia dirección de destino y además, registra cada mensaje en la base de datos, por lo que pueden ser consultados online sin necesidad de descargar el correo electrónico.

Nivel 3: Enviando correos electrónicos bajo ciertas condiciones

¿Qué pasa si queremos que cada vez que algún editor publique un contenido nuestra web, recibamos un correo electrónico con el nombre del autor, y un resumen de dicho artículo? Para esos casos ni Webform ni Contact nos sirven ya que no pueden interactuar con otros componentes del sitio o reaccionar a ciertos eventos.

En ese caso la recomendación es usar el módulo Rules. Que puede configurarse para que como acción envíe un correo electrónico si se dispara cierto evento (creación de contenido), y se cumplen ciertas reglas (el contenido es de tipo Artículo y fue publicado).

Nivel 4: Creando contenido a partir de un correo electrónico.

Apa! Que no todo es ir hacia afuera en la vida. ¿Qué ocurre si queremos realizar el proceso inverso? Me refiero a crear contenido en el sitio luego de procesar un correo electrónico.

En ese caso, tenemos que implementar otro tipo de soluciones. Hay algunos módulos que permiten leer correos electrónicos y transcribir su contenido en forma de nodos o comentarios.

Una de las opciones más completas es llevada adelante por el módulo MailHandler, que en su versión para Drupal 7 trabaja como un plugin del módulo Feeds. En líneas generales, cada vez que corre Cron, MailHandler abre y revisa una casilla de e-mail en busca de e-mails no leídos y luego de obtener su contenido se los pasa al módulo Feeds para que cree los nodos o entidades que hayamos configurado.

A la hora de trabajar con comentarios la mayor dificultad es el problema de la jerarquía de comentarios (Esto es, ¿Cómo sabemos bajo que comentario responder?, y que contenido de nuestro email es el comentario en si, y que parte es la conversación anterior). El módulo Mail Comment tiene código interesante para resolver este problema, pero también plantea soluciones un tanto incomodas como el uso de cadenas del tipo (((Responder arriba de esta línea para escribir un comentario))).

Conclusiones

Como pueden observar, hay de todo en el universo drupalístico, lo más importante es definir bien cuales son nuestras necesidades y probar las distintas alternativas. Procuren desinstalar completamente un módulo si van a probar con otro. Por ejemplo tuve problemas al desactivar SMTP y habilitar PHPMailer porque compartían variables con nombres iguales pero estructuras internas diferentes.

Tanto SMTP como PHPMailer afectan a todos los emails salientes del sitio. Por lo que no hay que preocuparse por configurarlo en cada caso.

¿Quedaron dudas? Pido disculpas por no explicar como se configura cada uno de los módulos, es que iba a ser muy largo el artículo. De todas formas si hay consultas acá abajo pueden utilizar los comentarios.

Te invito a leer también...

Compartir este material en...

Comentarios

Estoy de acuerdo que el tema del SPAM hasta el momento no tiene una solución eficaz, pero tener que usar un correo no corporativo creo que no es viable, si quieres potenciar tu imagen y transmitir profesionalidad. Se que es complicado, pero en mi caso, de momento sigo con el corporativo.

Hola,
desde hace 2 semanas me ha dejado de funcionar el envío de mails en mi web (Drupal 7). Da igual la dirección "from" que use (ya sea la de mi dominio, o una de gmail...). No me llegan nisiquiera los emails para reestablecer contraseñas de las cuentas de usuarios, ni los mails del formulario Contact del core de Drupal...Y siempre me aparecer un mensaje error tras enviar el formulario (en el log pone "error al enviar el e-mail "de:.... a: ....").

Si se te ocurre alguna solución te lo agradecería.

Saludos.

Buenas tardes,

¿Existe alguna utilidad o forma de realizar envíos de boletines corporativos que utilicen el protocolo de seguridad StartTLS?
En mi web con Drupal me salta el siguiente error registrado: "phpmailerException: Error SMTP: No se pudo autenticar. en PHPMailer->SmtpConnect()"

Al parecer no es posible configurar el SMTP usando el protocolo antes mencionado.
He buscado información por internet y no hay nada que concrete una solución al respecto. Mencionan algo relacionado con el uso de algún certificado pero no hay mayor profundidad en el tema. Por lo que estoy empezando a asumir que no es posible usar este protocolo en Drupal, no encuentro siquiera algún módulo que lo permita.

Cualquier sugerencia será bienvenida.
Un saludo.

Buenos días, tengo un pequeño problema en mi sitio, les explico una vez que halla sido creado una cuenta cuando cuando halla algun cambio tiene que llegar una notificación por correo y no me lo hace, si alguien me pudiera ayudar se los agradeseria. Saludos

se puede configurar para correos corporativos? grasias

Buenas tardes, tengo el siguiente caso: el sitio debe notificar por correo la creación de un nuevo contenido a una base de datos de correos, un disparador solo deja a enviar a un correo, también esta la opción de ejecutar un PHP pero el sitio actual no cuenta con esa opción, Rules Module solo envía a usuarios registrados...es lo que he leído hasta el momento, agradecería una ayuda con este tema.

Añadir nuevo comentario