viernes, octubre 06, 2006

Mandando Mails Con Adjuntos en PERL


Ahora vamos a ver un ejemplo de como mandar un correo con un archivo adjunto en perl usando el módulo MIME::Lite.

Supongamos que le queremos mandar a algún amigo los temas de la banda de rock en la que tocamos y no queremos ir mandando uno por uno a mano.

Lo único que deberían editar del script son las siguientes constantes:
  • $DATA_DIR, siendo la ruta al directorio donde se encuentran los archivos mp3.
  • $SERVIDOR_MAIL, siedo la IP o el FQDN del servidor de correo a utilizar.
  • $CUENTA_ORIGEN, mi casilla de correo.
  • $CUENTA_DESTINO, casilla de correo de mi amigo.
  • $mensaje, mensaje que recibe el destinatario del correo.
Les dejo el script, cualquier duda me la postean.

#!/usr/bin/perl -w

use strict;
use MIME::Lite;
use Net::SMTP;
use Readonly;

## Segundos que espera entre envios.
Readonly my $DELAY => 75;

## Ruta donde se encuentran los archivos a procesar.
Readonly my $DATA_DIR => "./";

Readonly my $EMPTY_STR => q{};

## Constantes referidas al envio del mail.
Readonly my $SERVIDOR_MAIL => 'localhost';
Readonly my $CUENTA_ORIGEN => 'micuentadecorreo@midominio.com';
Readonly my $CUENTA_DESTINO => 'lacasillademiamigo@sudominio.com';
Readonly my $TIPO_MIME => 'TEXT';

## Inicializacion de variables.
my $asunto_correo = $EMPTY_STR;
my $mensaje = $EMPTY_STR;
my $msg = $EMPTY_STR;

## Cargar el contenido del directorio a procesar en el array.
opendir MYDIR, $DATA_DIR;
my @items_en_directorio = grep !/^\.\.?$/, readdir MYDIR;
closedir MYDIR;

foreach my $archivo_a_procesar ( @items_en_directorio ) {
if ( -d $archivo_a_procesar ) {
print " $archivo_a_procesar - Es un directorio, se ignora \n";
}
else {
if ( $archivo_a_procesar =~ /.mp3/ ) {
print "Mandando:".$archivo_a_procesar."---\n";

$asunto_correo = 'MailAttacher::'.$archivo_a_procesar;
$mensaje = "Tu amigo ".$CUENTA_ORIGEN." quiere enviarte el tema: $archivo_a_procesar . "
. "\nQue lo disfrutes!!\n";

## Crear el mensaje.
$msg = MIME::Lite->new(
From => $CUENTA_ORIGEN,
To => $CUENTA_DESTINO,
Subject => $asunto_correo,
Type => $TIPO_MIME,
Data => $mensaje
);

$msg->attach( Type => 'audio/mpeg',
Path => $archivo_a_procesar,
Filename => $archivo_a_procesar,
Encoding => 'base64'
);

MIME::Lite->send( 'smtp', $SERVIDOR_MAIL, Timeout=>60);
$msg->send;

print "Espero $DELAY segs, para mandar el proximo archivo \n";
sleep ($DELAY);
}
else {
print $archivo_a_procesar." - No se manda, no es un mp3---\n";
}
}
}

exit 0;



No hay comentarios.: