Es una tarea habitual el que un programa CGI tenga que informar a un conjunto de usuarios respecto a nuevos datos generados. Por ejemplo, usted puede ser uno de los miles de webmasters que han solicitado el uso de un contador gratuito de páginas web, que le envía periódicamente estadísticas sobre los accesos a sus páginas, a través del correo electrónico. Este tipo de servicios, tienen la responsabilidad de informar a tantos usuarios, que requerirían de al menos una persona, a tiempo completo, dedicada a enviar estos datos a los usuarios. Claramente, esta no es una opción ni si quiera, para una gran empresa.
La forma de automatizar esta tarea es dejarle a Perl hacer el trabajo duro. En este artículo, crearemos un script en Perl, que hará exactamente esto. Vamos a ir paso a paso, dando explicaciones y analizando los puntos más complicados.
Perl, por ser como es, ofrece al programador varias posibilidades a la hora de hacer una misma tarea, y con ello, incluimos el envío de mensajes con sendmail. Sendmail es un programa de código abierto que se usa en la mayoría de los sistemas Unix y en unos cuantos NT. Sendmail, como su nombre indica, tiene la función de enviar emails. Vamos a usar la capacidad de Perl de abrir pipes a otros programas para así ejecutar sendmail y pasarle los parámetros necesarios. Si usted no conoce en profundidad sendmail, no importa. Simplemente considere que Sendmail se va a encargar de enviar el contenido del mensaje y las cabeceras correspondientes a sus destinatarios.
Aquí tenemos, por ejemplo, un sencillo programa que avisa al suscriptor de un mailing list, que su petición ha sido aprobada:
#!/usr/bin/perl
use CGI;
my $query = new CGI;
my $sendmail = "/usr/sbin/sendmail -t";
my $reply_to = "Reply-to: foo@bar.org";
my $subject = "Subject: Confirmación de su solicitud";
my $content = "Gracias por su solicitud.";
my $to = $query->param('send_to');
my $file = "subscribers.txt";
unless ($to) {
print $query->header;
print "Por favor, escriba su email y vuélvalo a intentar";
}
open (FILE, ">>$file") or die "Cannot open $file: $!";
print $to,"n";
close(FILE);
my $send_to = "To: ".$query->param('send_to');
open(SENDMAIL, "|$sendmail") or die "Cannot open $sendmail: $!";
print SENDMAIL $reply_to;
print SENDMAIL $subject;
print SENDMAIL $to;
print SENDMAIL "Content-type: text/plainnn";
print SENDMAIL $content;
close(SENDMAIL);
print $query->header;
print "La confirmación de su solicitud se le enviará ahora.";
A primera vista, puede comprobar que este programa es muy sencillo, y si no fuera tan explícito en los comentarios, aún se podría reducir más. Si profundiza un poco en el código, verá que no es difícil de interpretar, incluso si es usted un iniciado del Perl. Sin embargo, el programa cumple muy bien su función de enviar correo.
Mírelo línea por línea ... El cgi capta los datos del formulario web, el cual se compone de campos de texto:
<FORM method="POST" action="http://perlfect.com/cgi-perlfect/cgimail.pl"> <INPUT type="text" name="send_to"> <INPUT type="submit"> </FORM>
El script usa el módulo CGI.pm para obtener los datos del formulario. Si no conoce este módulo, le sugiero que se lo estudie bien, puesto que puede facilitarle mucho las cosas. La función param() del módulo CGI.pm, devuelve el valor de un campo del formulario si damos su nombre como argumento. Esto es todo lo que necesita saber por ahora, ya que la usamos simplemente para averiguar que ha tecleado el usuario en el formulario. En caso de que éste no haya escrito nada en el formulario, el script devolverá un mensaje de error, solicitando al usuario que vuelva a rellenar el formulario.
Usuarios que han visto este tema también han visto...
- Jerarquía de Operaciones en Perl
- Hola Mundo
- Conectar a una Base de Datos con Perl
- Trabajar con archivos en Perl
- Utilizando FormMail
Información legal | Política de Privacidad | Contacte con nosotros
Otro proyecto de Factoría de Internet. Copyright© 2003-2008 Factoría de Internet S.L.. Todos los derechos reservados.