Atualização automática dos membros de uma lista do Mailman

23 de março de 2009

Para finalizar a série de posts sobre o Mailman, vou mostrar um script simples que fiz para atualizar automaticamente os membros de uma lista de e-mails.

Veja também:
Transferindo uma instalação do Mailman entre servidores
Renomeando uma lista do Mailman

Para a minha necessidade, o script deveria fazer o seguinte:
1- Obter um arquivo CSV com uma lista de filiados a uma Instituição, a partir de um endereço de um sistema Web
2- Gerar uma lista de endereços de e-mails dos filiados ativos. A situação do filiado ficava no 24º campo do CSV e o e-mail no 18º campo.
3- Limpar os membros de uma lista de e-mails do Mailman e carregar novamente a lista de endereços recém gerada.

O script que fiz foi o seguinte. É claro que, dificilmente, alguém terá necessidades exatamente iguais às minhas, mas fica um exemplo que pode ser adaptado conforme a necessidade. Este script foi feito e testado no Fedora 10.

#! /bin/bash

wget -O membros.csv https://www.site.com.br/sistema/get_filiados.asp

IFS=$'\r'
for line in $(cat membros.csv)
do
  situacao=`echo -e "$line" | cut -d ';' -f 24`
  email=`echo -e "$line" | cut -d ';' -f 18`
  if [ $situacao = "Ativo" ]
  then
    echo -e "$email"
  fi
done >emails_membros.txt
IFS=$

/usr/lib/mailman/bin/remove_members -a -n -N nome-lista
/usr/lib/mailman/bin/add_members -r emails_membros.txt -w n -a n nome-lista

A linha “IFS=$’\r’” define o separador de campos, para identificar as quebras de linhas. Como o sistema que gera o CSV funciona com ASP em servidor Windows, ele gera o arquivo com ‘\r’ ao invés de ‘\n’.

As opções “-a -n -N” na remoção dos membros e “-w n -a n” na adição fazem com que nem os membros nem os administradores da lista recebam e-mails de confirmação de inscrição/desinscrição. Como esse era um script para ser executado diariamente, não seria boa ideia enviar avisos diários para cada um.

Depois de testado o script, movi para o diretório /etc/cron.daily para que ele fosse executado automaticamente e já está funcionando há algumas semanas sem problemas.

Deixe uma Resposta