Skip to content
Home » Spamassassin sobre Win32 y (II)

Spamassassin sobre Win32 y (II)

Vamos a completar el artículo sobre la instalación de Spamassassin con un pequeño script en Perl que lee una cuenta correo, genera un informe en un archivo de texto sobre los correos que se han identificado como spam y los borra del servidor.

Se supone que tenemos instalado Perl en la ruta: C:\\perl\\bin\\perl.exe; y un directorio llamado C:\\Mis_Documentos\\mail, que usaremos para archivos temporales y el informe final.

Siempre podéis adaptar estas rutas. Tened mucho cuidado con las barras de directorio, estas deben ser dobles, no simples.

#!C:\\perl\\bin\\perl.exe
use Mail::POP3Client;
use Mail::Internet;

$pop = new Mail::POP3Client( USER     => '[Nombre de usuario]',
                             PASSWORD => '[clave]',
                             HOST     => '[host]',
                             PORT 		=> 110,
                             DEBUG 		=> 0 );

@itmsHead = ('From', 'To', 'Subject', 'Date',
             'X-Spam-Flag', 'X-Spam-Checker-Version',
              'X-Spam-Status', 'X-Spam-Level');

open (MAILREPORT, ">C:\\\\Mis_Documentos\\\\mail\\\\mailReport.txt");

for( $i = $pop->Count(); $i > 0; $i-- ) {
	$j = 0;
 	open(fileOUT, ">C:\\\\Mis_Documentos\\mail\\\\tmpmsg.txt");
  foreach ( $pop->HeadAndBody( $i ) )
	{
    print fileOUT $_ . "\\n";
  }
  close(fileOUT);
	  
	$myVar = `spamassassin -t C:\\\\Mis_Documentos\\\\mail\\\\tmpinbox <
	          C:\\\\Mis_Documentos\\\\mail\\\\tmpmsg.txt`;

	$_ = $myVar;

  if (/X-Spam-Flag:[\\s]+YES/i)
  {

  	foreach $valor (@itmsHead)
  	{
  		@header{$valor} = /($valor:[^\\n]*)/;
  	}
		
    foreach $row (values %header)
    {
    	print MAILREPORT $row . "\\n";
    } 
    
    #Guardamos el informe
    @report = m/(Spam detection software(.*)it with an editor)/s;
    
    print MAILREPORT $1;
  
  	print MAILREPORT "\\n\\n" . "<" x 50 . ">" x 50 . "\\n\\n";
		
		#Borramos el correo del servidor
		$pop->Delete( $i );
		
  }
  
}

close (MAILREPORT);

$pop->Close();

exit(0);