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__
GeoURL