martes, noviembre 03, 2009
sex.py, o como validar direcciones de correo
Necesitaba limpiar una carpeta llena de archivos .txt, una Maildir en realidad, repletos de encabezados de rebotes y explicaciones de los majordomos y mailer-daemons. Es decir, recorrer esta marabunta de archivos, y volcar las direcciones de correo que allí figuraran.
Y me encontré con un tremendo programa, sex.py - este programa ya no puede encontrarse en el sitio de los desarrolladores, de modo que subi una copia aqui:
http://www.bunker.org.ar/incubadora.varios/Tools/sex.py
Actualización: Antes de ejecutarlo, suministrarle unas librerías necesaria:
sudo apt-get install python-dnspython python-ldns python-adns python-dns
Ejemplo:
python sex.py -sr Maildir/ base.txt
Este script es prácticamente una aspiradora de direcciones de correos, y puede ser apuntado hacia cualquier cosa, una url, un archivo, una carpeta, comparando con servidores dns por direcciones de correo validas, ordenando, quitando duplicados, volcando resultados a otro archivo, de todo.
Ejemplo para chequear si son direcciones validas desde el punto de vista del DNS:
sex.py -y base.txt | tee comparados.csv
Paciencia... este paso demora mucho. Y cuando termina veremos muchos codigos de error de todo tipo. Cuentas saturadas, inexistentes, mail server que evitan la conexion, filtros antispam celosos, etc.
Ocasionalmente aparecen algunos con codigo 250, que no son error pero que aparecen aquí.
De modo que evito estos "250" con
grep -v '250' comparados.csv > comparados2.csv
Ahora conviene abrir el comparados2.csv con openoffice, y quedarse con la columna A. Luego, esa columna puede pegarse en gedit para evitar durante la comparación que viene a continuación, problemas con codificaciones. El archivo mas limpio que obtenemos con gedit podriamos llamarlo, por ejemplo, sucios.txt
Tenemos ahora un archivo con direcciones que no sirven. Si quiero compararlos con mi archivo original, gigantesco de correos, y crear un nuevo archivo de direcciones validas:
for i in `cat base.txt`; do echo $i|grep -v -f sucios.txt; done > limpitos.new
Ojo que este for puede demorarse bastante. Chequear en otra terminal mediante un
tail -f limpitos.new
Listo, ahora me aseguro de no sobre exigir el smtp con rebotes innecesarios (que siempre son la mayoría). Además, es de unos amigos, y no quiero abusarme.
Otra alternativa a este bucle, a veces incompatible con algunos shells, son las siguientes líneas que disfruté programando en ruby.
i = 0
File.open('base.txt', 'r') do |f1|
while linea = f1.gets
File.open('sucios.txt', 'r') do |f2|
while linea2 = f2.gets
if linea == linea2
#puts "mail que existe en rebotados! - se debe ignorar" + linea
sucio = 1
break
else
sucio = 0
end
end #fin while 2
unless sucio == 1
puts linea
i = i + 1
end
end #fin segundo file.open
end #fin primer while
end #fin primer open
puts "Total limpios " + i.to_s
Se puede bajar desde http://www.bunker.org.ar/incubadora.varios/Tools/limpiar.rb
Eso es todo. Ahora se puede usar esta salida con algún programa como ssmtp, o para lo que usted quiera. Yo lo uso con mi Regadera. Como dato, de una base de 8000 correos, me quedaron limpios 6634, y sumado a la comprobación de que tienen muy buenas posibilidades de saltar filtros anti spam.
Saludos
Suscribirse a:
Comentarios de la entrada (Atom)
1 comentario:
Publicar un comentario