Limpando listas com mailman

Categoria: Scripts Publicado: Segunda, 22 Agosto 2005 Escrito por Helio Loureiro Imprimir

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.

 

Acessos: 8183
Mastodon Mastodon
We use cookies

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.