De tempos em tempos é necessário fazer uma *faxina* na lista de discussão que administro, a [linux-br]. Alguns usuários saem da lista, outros ativam os famosos *anti-spam*, e coisas do gênero começam a atolar a lista em mensagens incômodas. Isso pode ser resolvido com uma pequena remoção desses usuários (assim que comunicados). Infelizmente alguns desses usuários optam por fazer a inscrição na lista com um mail qualquer, em geral gratuito como gmail, e fazem o redirecionamento do mesmo para seu mail de recebimento. O que ocorre é que as mensagens retornam com um mail não inscrito na lista. Para encontrar o dono da mensagem, criei alguns script, dois na realidade.
Uma vez que não sou administrador do servidor de listas, não consigo simplesmente conectar e buscar a base de assinantes. Preciso solicitar a quem tem acesso shell para fazer isso. Como a CIPSGA é mantida por trabalho voluntário, nem sempre isso é rápido. Então criei um script para buscar os assinantes da lista, via web, e salvar em um arquivo:
#! /bin/sh
pass_adm="senha_admin"
lynx_opts="-accept_all_cookies -cookie_file=cookie -post_data"
member_link="http://listas.cipsga.org.br/cgi-bin/mailman/admin/linux-br/members"
file_dst="/tmp/listagem"
for char in a b c d e f g h i j k l m n o p q r s t u v x y w z
do for id in 0 1 2
do echo "Char=$char and ID=$id"
echo "adminpw=$pass_adm" | \
lynx $lynx_opts "${member_link}?letter=$char&chunk=$id" | \
grep @ | grep "^.*\[" | sed 's/.*\]//' | \
grep -v "de .* para " >> $file_dst.$$
done
done
cat $file_dst.$$ | sort -u > $file_dst
Com isso cria-se a listagem de usuários.
Uma vez com a lista em mãos, falta enviar uma mensagem para cada assinante para verificar se o mesmo está ativo ou não. ?? interessante indexar o envio para saber quem é quem. O seguinte script faz o serviço:
#! /usr/bin/env python
server="mail.dominio.com.br"
port=25
mailfrom="Helio Loureiro"
rcptto="" subject="Checagem da linux-br"
import sys, smtplib
try:
file = open(sys.argv[1])
erro_f = open("/tmp/mail_err.lst","w")
except:
print "Use: %s [mails_list_file]" % sys.argv[0] sys.exit(0)
id=1
for line in file:
rcptto = line[:-1]
print "Sending for: " + rcptto + " [" + str(id) + "]"
msg = "From: " + mailfrom + "\r\n"
msg += "To: " + rcptto + "\r\n"
msg += "Subject: " + subject + "[" + str(id) + "]\r\n"
msg += """
Essa eh uma mensagem de verificacao de inscricao da linux-br.
Favor nao responder.
./helio (BOFH)
-= Developed in Python =-
"""
try:
mail = smtplib.SMTP(server,port)
mail.sendmail(mailfrom, rcptto, msg)
mail.quit()
except:
print "Error sending: " + rcptto
error_f.write(line)
error_f.flush()
id += 1
sys.exit(0)
Com isso tem-se uma forma de saber quem é quem na lista e remover os indesejados.