Mostrando las entradas con la etiqueta spam. Mostrar todas las entradas
Mostrando las entradas con la etiqueta spam. Mostrar todas las entradas

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

martes, febrero 10, 2009

Regadera 0.1


El fin de semana necesitaba enviar un aviso a un listado grande de correos (869). Sin embargo, no quiero abusar de mi SMTP, que además de ser pago, soporta algo así como 200 msg/hora.

Disclaimer: Es muy poco frecuente que me dedique a este tipo de tareas, y todas las direcciones que tengo que enviar son de profesores y alumnos de la escuela.

El sabado estuve bajando sharewares que hacían la tarea. Y son todos malisimos. El mejorcito, Atomic NoseQue se colgaba en el 67º envío.

Al final, bastante mosqueado, escribí este programita en java.

1) Alimenta un vector con un archivo repleto de correos. No, no soporta wab, ni doc, ni csv, ni pst. Un poco de rudimentaria minería y una hoja de cálculo, bastaría para crearlo.

2) Serializa el comando ssmtp (¡ojo, q no es un daemon, RTFM!). Hay que configurarlo previamente como figura aquí.

3) Deja tranquilo al server un (buen) rato, y vuelve a la carga. Ajustable, vea.

Decidí no agregarle lectura de parámetros desde consola, a fin de no facilitarle las cosas a cualquier cochino spammer que pudiera llegar hasta aquí.

Úsese con amor y criterio.

(haga click en criterio para bajar)