Últimos Cambios |
||
Blog personal: El hilo del laberinto |
Última Actualización: 22 de Enero de 2.001 - Lunes
Majordomo es un gestor de lista de correo escrito en Perl. Su misión fundamental es gestionar las altas y bajas de usuarios, y encargarse del envío de los mensajes a las listas de correo cuando éstas se han configurado de forma especial (por ejemplo, limitando el tamaño de los mensajes o sólo permitiendo mensajes desde miembros).
Majordomo carece, no obstante, de un sistema de control de "bounces" automatizado, porque lo que resulta imprescindible el seguir las listas administradas con cierta asiduidad y proceder a dar de baja a los usuarios cuya dirección de correo electrónico nos está dando problemas.
Esta tarea, manual, al margen de resultar aburrida y proclive a errores, no se ve facilitada por el hecho de que, por ejemplo, algunos problemas con determinadas direcciones de correo son temporales y se solucionan tras un cierto tiempo. El caso típico es el de las cuotas de correo.
Cansado de realizar todo el trabajo sucio de forma manual, me decidí a escribir varios scripts para automatizar las tareas más ingratas y/o que me consumían más tiempo. El resultado se encuentra en esta página.
He utilizado estos scripts, con ligeras variaciones, durante años, sin ningún tipo de problema. No obstante no doy ninguna garantía, ya que buena parte de su correcto funcionamiento depende de los mecanismos de administración que utilicemos con las listas de correo. Por ejemplo, estos scripts NO bloquean las listas de correo cuando realizan algún cambio en las suscripciones; en mi configuración eso no es necesario, porque todas las altas y bajas son moderadas y tenía cuidado de no realizar aprobaciones administrativas mientras utilizaba los scripts. No obstante, la primera tarea que debería hacer cualquier persona que le interese modificar mis scripts es dotarlos del sistema de bloqueos incluído en el propio majordomo.
Dado que he migrado a mailman, libero estos scripts con la licencia GPL. Todos los scripts están escritos en SHELL (el perl no me gusta nada :-).
Todos los scripts trabajan de forma similar: bajo su directorio raíz debe existir el directorio "lists", que contiene las listas de correo, y el directorio "lists-bounce", que contiene los "bounces".
Cuando empezamos a recibir mensajes de "bounce" desde un usuario determinado, lo más habitual consiste en darle de baja. Yo, sin embargo, no lo doy de baja definitivamente, sino que muevo a dicho usuario a otra lista de correo de "bounces", a la que envío avisos periódicos. En esa otra lista, los emails son marcados con la fecha de desuscripción, para poder eliminar a la gente que lleva mucho tiempo en esa lista y no ha tomado ninguna medida correctora.
El script se ejecuta tomando como parámetro el nombre de la lista de correo.
#!/bin/sh if [ $# -lt 1 ]; then echo Falta parametro: $0 lista exit 1 fi fecha=`date "+%e/%b/%y"` cd lists-bounce cp ../lists/$1 .$1 vi ../lists/$1 echo echo \*\*\* An~adiendo a lista de bounces para \"$1\": echo diff ../lists/$1 .$1 | grep "^> "| cut -c3-1000 >.$1.2 while read email do echo $email echo $fecha $email >> $1-bounce done < .$1.2 rm .$1 .$1.2
Cuando ejecutamos el script, nos aparecerá la lista de usuarios suscritos ahora mismo. La editamos con nuestro editor de texto y almacenamos los cambios. Tras salir del editor, este script comprueba las bajas que hemos hecho y las añade al fichero de "bounces" para esa lista de correo, incluyendo la fecha de la baja.
Aunque se puede hacer, no se recomienda añadir ningún email cuando se ejecuta este script. Está diseñado sólo para hacer bajas, y transferir las bajas de la lista de correo normal a la lista "bounce".
Cuando tenemos a usuarios en la lista "bounce" hay que enviarles mensajes periódicos informándoles de que han sido desuscritos, y del procedimiento para darse de alta nuevamente.
El script se ejecuta tomando como parámetro el nombre de la lista de correo.
#!/bin/sh # # Envia un aviso de "bounce" a todos los miembros de una lista que han sido dados de baja # cat lists-bounce/$1-bounce | while read fecha email do email=`echo $email | sed -e 's/"[^"]*"//g' -e 's/([^()]*)//g' -e 's/.*<\(.*\)>.*/\1/'` echo $fecha $email ( echo X-Bounce: $email echo From: $1-owner@argo.es echo Subject: Aviso desuscripcion lista \"$1@argo.es\" echo echo Este email es un aviso de que ha sido desuscrito de la lista echo \"$1@argo.es\" debido a que su buzon de correo echo \($email\) estaba rechazando los mensajes. echo echo Usted ha estado desuscrito desde $fecha. echo echo Si quiere suscribirse de nuevo a la lista, envie un mensaje echo informando de la solucion del problema a \"$1-owner@argo.es\". echo ) | mail -t $email done
Normalmente el recordatorio de "bounces" se envía a todas las listas de correo.
El script se ejecuta sin ningún parámetro. Enviará notificaciones a todos los usuarios en todas las listas de "bounce".
#!/bin/sh BOUNCE="-bounce" for i in lists-bounce/*$BOUNCE do v=`basename $i $BOUNCE` echo echo \*\*\*Informando de BOUNCES para la lista \"$v\": echo ./z-bounce-reminder $v done
Con todo el tema de los recordarios que envía el script anterior "repescamos" a algunos usuarios, que nos piden ser resuscritos.
Para ello ejecutamos este script, cuyo parámetro es el nombre de la lista de correo.
#!/bin/sh if [ $# -lt 1 ]; then echo Falta parametro: $0 lista exit 1 fi cd lists-bounce cp $1-bounce .$1-bounce vi $1-bounce echo echo \*\*\* Retirando de la lista de bounces para \"$1\": echo diff $1-bounce .$1-bounce | grep "^> "| cut -f3-1000 -d " " >.$1-bounce.2 while read email do echo $email echo $email >> ../lists/$1 done < .$1-bounce.2 rm .$1-bounce .$1-bounce.2
Cuando ejecutamos el script, nos aparecerá la lista de usuarios en "bounce". La editamos con nuestro editor de texto y almacenamos los cambios. Tras salir del editor, este script comprueba las altas que hemos hecho y las añade a la lista de correo.
Uno de los problemas de gestionar una lista de correo es la identificación de direcciones de email problemáticas, pero que no somos capaces de identificar. El problema es que muchos de estos sistemas envían al administrador de la lista un mensaje de error... ¡¡¡sin ninguna indicación de la dirección o direcciones de correo electrónico que han provocado el error!!!.
Cuando tenemos una lista de correo con miles de usuarios suscritos, la mayoría de los cuales utilizan "remailers", alias de correo, etc., este problema puede ser bastante "estresante".
El script que sigue envía un mensaje personalizado (y, por lo tanto, fácil de identificar) a todos los suscriptores de una lista de correo, con la esperanza de que el "bounce" generado nos permita identificar, esta vez sí, el email puñetero.
Si sabemos en qué proveedor cuelga el "remailer" o similar (bigfoot, por ejemplo), podemos hacer un "grep" en la línea que lee los suscriptores, para limitar el chequeo de "bounce" exclusivamente a los usuarios dependientes de dicho dominio, y no molestar al resto.
El script se ejecuta tomando como parámetro el nombre de la lista de correo que queremos verificar.
#!/bin/sh # # Envia un chequeo de "bounce" a todos los miembros de una lista # cat lists/$1 | while read email do email=`echo $email | sed -e 's/"[^"]*"//g' -e 's/([^()]*)//g' -e 's/.*<\(.*\)>.*/\1/'` echo $email ( echo Subject: Administratrivia lista \"$1@argo.es\": $email echo X-Bounce: $email echo From: $1-owner@argo.es echo echo Este email es una prueba de \"bounce\" para la lista \"$1@argo.es\", echo recibido por todos sus suscriptores para intentar determinar echo la direccion de email que esta rechazando correo. echo echo Normalmente la direccion es obvia, pero cuando se utilizan echo redirectores de correo o hay MTAs intermedios que filtran echo cabeceras, resulta necesario recurir a un sondeo individualizado. echo echo Si usted ha recibido este mensaje, es que todo ha ido bien. echo Su email no es el problematico. echo echo Este es un mensaje generado de forma automatica. Por favor, echo *NO* responda. echo echo Gracias por su cooperacion y disculpe las molestias. Para echo cualquier duda o aclaracion, escriba a \"$1-owner@argo.es\". echo ) | mail -t $email done
Más información sobre los OpenBadges
Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS