 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.
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.
 
                    