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);
}

