http://webmaster.bankhacker.com/perl/sendmail.phtml

¿Cómo enviar emails usando Perl y Sendmail?

Artículo original de N.Moraitakis y G.Zervas
http://www.perlfect.com/articles/sendmail.shtml
Traducción al Castellano por JIPS, BankHacker, 2001

 

¿Cómo programar un formulario con envío de correo mediante un script cgi-bin en Perl?

 

Últimas Ofertas de Empleo para Linuxeros/a>

¿Cómo enviar emails usando Perl y Sendmail?

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: [email protected]";
 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/plain\n\n";
 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.

BankHacker I+D Labs

Si el usuario introduce una dirección de email, se agrega al final de un fichero de texto para un uso posterior por otro programa, tras lo que el script devuelve un email de confirmación al usuario.

Un mensaje de email está compuesto por cabeceras y contenido. Hay muchas posibles formatos de cabeceras, pero el más habitual es el siguiente:

To:

Una lista separada por comas de las direcciones de destino.

From:

La dirección de email del remitente.

Reply-to:

La dirección de email donde se contestará al mensaje.

Subject:

El título del mensaje.

Content-type:

El tipo MIME del contenido.

Las cabeceras preceden al contenido del mensaje. La cabecera Content-type se define justo antes del contenido y le siguen siempre dos caracteres de cambio de línea.

Sendmail ofrece la posibilidad, como la mayoría de los programas unix, de leer a partir del standard input, por lo que lo único que necesitamos hacer es abrirle un pipe y alimentarlo con los datos que queremos que procese. Apreciarán que hemos pasado el parámetro -t a sendmail. Éste simplemente le indica a sendmail que busque en los datos las cabeceras To:, Cc: o Bcc: y obtenga los destinatarios de ahí. Una vez abierto correctamente el pipe, volcamos el mensaje. Primero, las cabeceras, cada una seguida de un caracter cambio de línea, luego un cambio de línea adicional y, por fin, el contenido del mensaje. Después cerramos el pipe. Así, el mensaje de email se abrá enviado correctamente!

Estos son algunos casos prácticos donde usar sendmail y perl:

  1. Informar a las visitas de su web (sólo a las que lo soliciten) sobre novedades o actualizaciones. El script del ejemplo es una buena forma de obtener las direcciones de email de aquellos a los que queremos escribir.
  2. Informarse a sí mismo sobre el funcionamiento de los scripts que ejecuta. Por ejemplo, usted puede escribir unas pocas líneas de código para que le envíen un email cuando algo va mal en uno de sus scripts.
  3. Montar un mailing list.

Esto son sólo algunos ejemplos, pero hay algo que usted nunca debería hacer, y es el spam. Nunca envíe emails a personas que no lo hayan solicitado, porque posiblemente no les sentará bien, y anularán el recibo de mensajes procedentes de su cuenta de correo. Disfrute y sea amable!

Lecturas recomendadas

 

 

Hosted by www.Geocities.ws

1