Otra tarea pendiente, la de importar las listas de correo de egroupware a mailman.
Egroupware dispone de un módulo de listas de correo entre los miembros, pero si estamos usando egroupware como gestor de contactos y tenemos un servidor de listas como mailman, el gestor de listas de egroupware se nos puede quedar pequeño. Así que vamos a ver como importamos las listas y los usuarios de egroupware.
La idea como siempre es la de tratar de tocar lo mínimo posible el software, esto nos permitirá poder realizar actualizaciones sin temer a que dejen de funcionar nuestros scripts.
Lo primero será crear un usuario en nuestro servidor de egroupware que lo llamaremos “mailman”.
root@Aludra-egroupware:~# adduser mailman
Nos iremos al /home de éste usuario y crearemos el fichero .my.cnf con las credenciales del usuario de la base de datos de egroupware que encontraremos en el fichero /usr/share/egroupware/header.inc.php
root@Aludra-egroupware:~# cd /home/mailman root@Aludra-egroupware:/home/mailman# vi .my.cnf [client] user = egroupware password = "mysecretpassword" database = egroupware root@Aludra-egroupware:/home/mailman# chown mailman:mailman .my.cnf root@Aludra-egroupware:/home/mailman# chmod 600 .my.cnf
Recomiendo poner el password entre comillas porque algunos carácteres pueden darnos problemas y no permitirnos acceder automáticamente con el usuario mailman a la base de datos mysql.
Ahora nos iremos al servidor de mailman y nos validaremos al servidor de egroupware por clave ssh con el usuario mailman
root@lists:~# cd .ssh root@lists:~/.ssh# ssh-keygen -t dsa root@lists:~/.ssh# ssh-copy-id -i id_dsa.pub mailman@10.90.xxx.xxx
Y ahora en el servidor de listas creamos éste script en nuestro directorio de scripts favorito :)
#!/bin/bash LISTS=`ssh mailman@10.90.xxx.xxx mysql -B -N -e '"select list_name from egw_addressbook_lists order by list_name desc limit 5;"'` OUTPUT=`ssh mailman@10.90.xxx.xxx mysql -B -N -e '"SELECT contact_email, list_name FROM egw_addressbook2list, egw_addressbook, egw_addressbook_lists WHERE egw_addressbook2list.contact_id=egw_addressbook.contact_id AND egw_addressbook2list.list_id=egw_addressbook_lists.list_id;"'` #echo -e "${OUTPUT}" | awk {'print $1'} #echo -e "${LISTS}" for f in ${LISTS} do echo "Llista: ${f}" MAIL=`echo -e "${OUTPUT}" |grep ${f} |awk '{print $1}'` EXISTS=`ls /var/lib/mailman/lists |grep -i ${f} |wc -l` if [[ "${EXISTS}" == 0 ]]; then echo "List does not exist! Please, create it!" echo "Execute: /var/lib/mailman/bin/newlist --urlhost=lists.capa8.net ${f}" echo else echo "YEP!!!! the list exists!!! :D these are the users to import!" for g in ${MAIL} do IS_IN_LIST=`list_members ${f} |grep ${g}` if [[ "${IS_IN_LIST}" == 0 ]]; then echo -e " Mail: ${g} is not in list, adding it!" echo "${g}" | add_members -r - ${f} else echo -e " Mail: ${g} is already subscribed to list, nothing to do" fi done echo fi done
Le damos permisos de ejecución y lo ejecutamos o lo añadimos a cron.
Estaba pensando en crear automáticamente las listas de correo o no, pero finalmente he pensado que mejor no, así hay un poco mas de control (sino los administradores nos quedamos sin trabajo!), además no he encontrado una forma de generar totalmente de forma automática a una lista a menos de usar spect (que creo que no hace falta liarla :P).
Tengo que remarcar la importancia de que los nombres de las listas de correo de egroupware, que no tengan espacios ni carácteres especiales.
Pues esto es todo :) a importar!!!