Filtro antispam en una carpeta de correo Maildir
2003-11-02 00:00:00
Este es el tipico filtro antispam basado en patrones de texto, en particular, en expresiones regulares: cuando el programa encuentra que alguna
de las expresiones regulares contenidas en un fichero de filtros esta en el fichero del correo, lo marca como spam y mueve el fichero fuera
de la carpeta Maildir a otra carpeta indicada en el programa. Evidentemente, se puede modificar de forma trivial para que elimine dichos
correos basura, e invito ha hacer las modificaciones pertinentes si ese es el deseo del lector, pero, personalmente, precisamente hice este programa
para reemplazar una funcionalidad de otro, que siempre eliminaba el spam sin informar de lo que habia hecho y por que, y para mi gusto
era tomarse demasiadas libertades, sobre todo cuando esta en juego la eliminacion por error de correos importantes. Dicho, esto paso a mi programa, llamado filtroantispam:
#!/usr/bin/perl open (FICHERO, $ARGV[0]); while ( <FICHERO> ) { # Medida de seguridad importante, nunca bajar a 0 o todo sera spam if ( length ( $_ ) > 5) { $_=~s/\\n$//; push ( @filtros, $_ ); } } close(FICHERO); shift (@ARGV); # Directorio en el que guardamos los Spams $directoriospams="/home/saiyine/Spam"; # ¿Anotamos todo lo que hemos filtrado? $anotar="Si"; foreach $fichero (@ARGV) { open (FICHERO, $fichero); @lineas = <FICHERO>; close(FICHERO); $esspam="No"; $alfinal=0; foreach $filtro (@filtros) { foreach $linea ( @lineas ) { if ( $linea=~/$filtro/i ) { if ( $anotar eq "Si" ) { print "$fichero contiene <$filtro>\\n"; } system ("mv $fichero $directoriospams"); $esspam="Si"; last; } } if ( $esspam eq "Si" ) { last; } } }
El fichero de filtros contiene expresiones regulares del estilo perl que si las contiene el correo lo marcaran como spam. Es importante pensar muy bien la expresion regular, ya que una regex demasiado ambigüa puede hacer pensar al programa que todo lo que te llegue es spam, lo que te haria tener que estar mirando
de vez en cuando en el deposito de correos basura, cosa que tampoco estaria demasiado mal hacer de vez en cuando "por si acaso". Este es un ejemplo con
las primeras lineas de mi fichero de filtros
From:.*dannimail* Subject:.*orreo.*asura.*$ Subject:.*natural.*figures.* From:.*pills\.com.* From:.*internet.*deals.* Subject:.*[V|v][i|1]agra.*