25 octubre 2003

Script para enviar ficheros por correo. 

El siguiente script envia una serie de ficheros por correo electrónico a la dirección que se indique en linea de comandos. Si se ejecuta sin parámetros, pedirá los parámetros que necesite. Si se ejecuta con el parámetro -h se obtendrá una descripción de las opciones como la siguiente:
noitami:~/programas$ ./envia-fichs.pl -h
Envia ficheros mediante email.
envia-fichs.pl [-nozip] [-h] [-r email] [-d email] [-s asunto] archivos
Parametros:
        -h              Muestra este mensaje y sale
        -nozip          No comprime los ficheros en un zip adjunto.
                        El mensaje generado incluye un adjunto por cada fichero.
                        Por defecto genera un sólo adjunto tipo zip con todos
                        los ficheros.
        -r email        Dirección de correo del remitente. Si no se indica se
                        pide por la entrada estándard
        -d email        Dirección de correo del destinatario. Si no se indica
                        se pide por la entrada estándard
        -s asunto       Asunto del mensaje. Si se llama desde la linea de
                        órdenes normalmente se debe encerrar el texto del asunto
                        entre comillas.
        -mx SmtpServer  Servidor smtp a utilizar. En el código se ha puesto uno por
                        defecto.
        archivos        Lista de archivos a incluir en el mensaje.
Ejemplo:
        echo "Cuerpo del mensaje" | envia-fichs.pl  -r 'drodriguez@dominio.com' 
                             -d 'davidrf@dominio.com' -s 'Prueba' *.pl -nozip ../*.JPG
 
noitami:~/programas$

Código fuente
#!/usr/bin/perl
use MIME::Lite;
$ayuda = 0;
$SMTPSERVER="192.168.250.100";
$comprimir = 1;
$From = '';
$To = '';
$Subject = '';
do{
        $cadena = '';
        $cadena = shift(@ARGV);
        if ($cadena eq '-h'){
                $ayuda = 1;
        }elsif ($cadena eq '-nozip'){
                print "No comprimir\n";
                $comprimir = 0;
        }elsif ($cadena eq '-r'){
                $From = shift(@ARGV);
        }elsif ($cadena eq '-d'){
                $To = shift(@ARGV);
        }elsif ($cadena eq '-s'){
                $Subject = shift(@ARGV);
        }elsif ($cadena eq '-mx'){
                $SMTPSERVER=shift(@ARGV);
        }elsif ($cadena ne ''){
                push @ARCHIVOS,$cadena;
        }
}while($#ARGV >= 0);
 
 
if ($ayuda){
        print <<EOF;
Envia ficheros mediante email.
envia-fichs.pl [-nozip] [-h] [-r email] [-d email] [-s asunto] archivos
Parámetros:
        -h              Muestra este mensaje y sale
        -nozip          No comprime los ficheros en un zip adjunto.
                        El mensaje generado incluye un adjunto por cada fichero.
                        Por defecto genera un sólo adjunto tipo zip con todos 
                        los ficheros.
        -r email        Dirección de correo del remitente. Si no se indica se 
                        pide por la entrada estándard
        -d email        Dirección de correo del destinatario. Si no se indica 
                        se pide por la entrada estándard
        -s asunto       Asunto del mensaje. Si se llama desde la linea de 
                        órdenes normalmente se debe encerrar el texto del asunto
                        entre comillas.
        -mx SmtpServer  Servidor smtp a utilizar. En el código se ha puesto uno por
                        defecto.
        archivos        Lista de archivos a incluir en el mensaje.
Ejemplo:
        echo "Cuerpo del mensaje" | envia-fichs.pl  -r 'drodriguez\@dominio.com'
-d 'davidrf
\@dominio.com' -s 'Prueba' *.pl -nozip ../P4230002.JPG EOF exit; } $| = 1; if ($From eq ''){ print "Remitente : "; $From = <STDIN>; } if ($To eq ''){ print "Destinatario : "; $To = <STDIN>; } if ($Subject eq ''){ print "Asunto : "; $Subject = <STDIN>; } print "Texto -- Finalizalo con una linea con solo un punto como contenido\n"; print "o pulsando control+Z\n"; $linea = ""; $texto = ""; while (($linea = <STDIN>)&&($linea ne ".\n")){ $texto = $texto . $linea; } chomp($From); chomp($To); chomp($Subject); print "Generando mensaje de correo...\n"; $msg = MIME::Lite->new( From =>$From, To =>$To, Cc =>$From, Subject =>$Subject, Type =>'multipart/mixed' ); MIME::Lite->send('smtp', $SMTPSERVER, Timeout=>60); $msg->attach(Type =>'TEXT', Data =>$texto ); if ($comprimir){ print "Generando ZIP adjunto...\n"; $ZIP = '/tmp/correo.zip'; system("rm $ZIP 2>/dev/null"); foreach $archivo (@ARCHIVOS){ system("zip -9 $ZIP \"$archivo\""); } print "ZIP generado\n"; system("ls -lh $ZIP"); $msg->attach(Type =>'application/zip', Path => $ZIP, Filename =>'ficheros.zip', Disposition => 'attachment' ); }else{ foreach $archivo(@ARCHIVOS){ $trozos = split(/\//,$archivo); $Filename = $trozos[$#trozos]; $msg->attach( # Type =>'application/zip', Path => $archivo, Filename => $Filename, Disposition => 'attachment' ); } } print " mensaje generado\nEnviando mensaje..."; $msg->send; print " mensaje enviado.\n"; system("rm $ZIP 2>/dev/null"); __END__

Get Firefox!

This page is powered by Blogger. Isn't yours?

GeoURL