Andrés Canavesi | Blog

Mar/09

24

Script en Perl para el envío masivo de mails


Les dejo un script hecho en Perl para el envío masivo de mails.
Es sencillo y bastante intuitivo.
Lo que debes hacer es copiar el código y guardarlo en un archivo por ejemplo mailing.pl
Luego para ejecutarlo, abre una consola y tipea:

$ perl mailing.pl

Logicamente, previo a hacer una ejecución de prueba debes modificar el script con los datos que sean necesarios, esto es, conexión a base de datos, tablas a seleccionar, etc.


#!/usr/bin/perl
# Programa para el envio de mails

print "\n Comienzo.. \n";

use DBI();
use strict;

my $opcion = $ARGV[0]; #en caso de pasarle parametros al script, los atrapo aqui (en este caso no se usa)

my $db = openConnection(); #conecto con la BD

my $asunto = "Mi asunto"; #asunto del mail que va a ser enviado
my $remitente = "micorreo\@correo.com";
my $mensaje = "mensaje.html"; #cuerpo del mail en html

my @mails = getEmails($db);
my $i;
for ($i=0; $i<=$#mails; $i++) #para cada correo obtenido de la BD...
{
my($id, $email) = split(":", $mails[$i]);
enviarCorreo($email, $asunto, $remitente);

}

print "\n Se han enviado ".$i." correos \n";

print "\n Fin. \n";

closeConnection($db); #cierro la conexion a BD

sub openConnection
{
my $db = DBI->connect("DBI:mysql:database=nombre_BD;host=mi_host","mi_usuario","mi_password",{'RaiseError' => 1});
return $db;
}

sub closeConnection {
my $db = $_[0];
$db->disconnect();
}

sub getEmails()
{
my ($db) = @_;

my $query = " SELECT emails";
$query .= " FROM mi_tabla";
$query .= " WHERE alguna_condicion";

my $sth = $db->prepare($query);
$sth->execute();
my @data_array;
my $i = 0;
while(my $ref = $sth->fetchrow_hashref()) {
$data_array[$i] = $ref->{"id"}. ":" . $ref->{"email"};
$i++;
}
$sth->finish();
return @data_array;
}

sub enviarCorreo
{
my($email, $asunto, $remitente, $algo_a_sustituir) = @_; #atrapo los parametros pasados a la sub rutina
open(MAILING, "$mensaje") || die "No se encontro el archivo '$mensaje'\n";
my $buffer = "";

my $line;
while (defined($line = )) {
$buffer .= $line;
}
close(MAILING) || die "Error cerrando '$mensaje'\n";

$buffer =~ s/{{algo_a_sustituir}}/$algo_a_sustituir/;

open (MAIL,"|/usr/sbin/sendmail -t") or die "No se puede abrir sendmail\n";
print MAIL "To: $email\n";
print MAIL "From: Mi nombre <$remitente>\n";
print MAIL "Subject: $asunto\n";
print MAIL "Content-Type: text/html\n";
print MAIL "$buffer\n";
print MAIL "\n";
close(MAIL);
}



RSS Feed

Aún no hay comentarios.

Leave a comment!

«

»

Find it!

Theme Design by devolux.org