#!/usr/bin/perl

use strict;

use Net::POP3;
use Mail::Sender;
use MIME::Parser;
use MIME::Entity;
use MIME::Body;

# Nos conectamos al servidor
my $servidor = "sistemasorp.es";
my $pop3 = Net::POP3->new($servidor);
die "No puedo conectar al servidor" unless $pop3;


# Nos validamos
my $usuario = "qrdecode+sistemasorp.es";
my $password = "xxxx";
my $numMensajes = $pop3->login($usuario, $password);

# Recuperamos la lista de mensajes
my $msjID;
my $msjContenido;
my $mensajes = $pop3->list();
foreach $msjID (keys(%$mensajes))
{
    $msjContenido = $pop3->get($msjID);
    # Por cada mensaje buscamos si tiene imagenes
    actuaMensaje(@$msjContenido);
    $pop3->delete($msjID);
}

$pop3->quit();

sub actuaMensaje
{
  my $parser = new MIME::Parser;
	
  my (@lineas) = @_;

  my $linea;
  my ($cuerpo,@cuerpo,$indice,$subentidad);
  
  # Guardamos el contenido del mensaje en un fichero temporal
  open my $FICHERO,">/tmp/qrdecode.tmp" or die "No puedo crear el fichero\n";
  foreach $linea (@lineas)
  {
   print $FICHERO $linea;
  }
  close $FICHERO;

  # Interpretamos el mensaje y guardamos el contenido en un directorio y las cabeceras en variables
  $parser->ignore_errors(1);
  $parser->output_under("/home/qrdecode/ficheros");
  my $entidad = $parser->parse_open("/tmp/qrdecode.tmp");
  my $cabecera = $entidad->head;
  my $asunto = $cabecera->get('Subject');
  my $a = $cabecera->get('To');
  my $de = $cabecera->get('From');
  my $mensaje = "Hola, estos son los resultados de las imagenes enviadas:\n";

  # Si tiene varios trozos es posible que tenga imagenes
  if ($entidad->parts > 0)
  {
  	for ($indice=0; $indice<$entidad->parts; $indice++)
	{
		$subentidad = $entidad->parts($indice);
        # Si uno de los trozos es una imagen
		if (($subentidad->mime_type =~ m/image/i))
		{
            # Vamos generando una cadena con el nombre del fichero de imagen y el texto que contiene
			$mensaje .= "\n__ " . $subentidad->head->mime_attr('content-disposition.filename') . " __\n";
			my $cuerpo = $subentidad->bodyhandle;
            # Ejecutamos la libreria QRCODE de java para que interprete la imagen
			open (DATA, "java -cp /usr/java/qrcode/lib/qrcode.jar:/usr/java/qrcode/binarios LectorQR " . $cuerpo->path . "|") or die "No se pudo ejecutar java: $!";
			while(<DATA>)
			{
				chomp;
				$mensaje .= $_;
			}
			close(DATA);
		}
	}
  } 
  $mensaje .= "\n____\n\nDecodificador de QRCODE por email - 0.1b - Oscar Rodriguez Parra - 2007";
  chomp($asunto);
  chomp($a);
  chomp($de);
  # Enviamos un correo al remitente con el contenido de las imagenes
  my $sender=Mail::Sender->new;
  if ($sender->MailMsg({
      smtp    => $servidor,
      from    => 'QRDECODE <qrdecode@sistemasorp.es>',
      to      => $de,
      subject => $asunto,
      msg     => $mensaje,
      auth    => 'LOGIN',
      authid  => $usuario,
      authpwd => $password,
      }) < 0) {
            die "$Mail::Sender::Error\n";
        }
  $sender->Close;
}

