¡Ya estamos en Twitter!

Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad

POP3 con Perl

por Uriel Lizama

Introducción

Ya van varios mails que recibo de personas que quieren saber como leer emails por medio de POP3 con perl.

Ya hemos visto en tutoriales anteriores como enviar emails tanto en Windows como en UNIX. Ahora esta vez vamos a aprender a leer nuestros mails usando perl.

Este tutorial es una base con el que más adelante podrán hacer aplicaciones más complejas.

El módulo

Para leer nuestros mails por medio de POP en CPAN tenemos un módulo que hace justo lo que necesitamos. El módulo se llama Net::POP3, este módulo nos brinda justo lo que necesitamos para lograr lo que queremos.

Iniciando

Como siempre primero ponemos la cabeza de nuestro script donde llamamos al módulo, y como es necesario al pragma strict:

#!/usr/bin/perl -w

use strict;
use Net::POP3;

Ahora necesitamos crear un objeto de Net::POP3 abriendo de esta manera una conexión a nuestro servidor:

my $pop = Net::POP3->new('SERVIDOR', Timeout => 60) || die "No se pudo abrir conexión: $!";

Lo que hacemos es llamar a la función new enviando dos argumentos:

SERVIDOR que es el servidor al que queremos conectarnos. Normalmente es algo como: mail.miservidor.com. Y el Timeout donde indicamos que si no logramos establecer una conexión en 60 segundos deje de intentar y regrese un error. Hacemos esto para evitar que el programa se quede atorado para siempre intentando conectarse.

Muy bien, ya estamos conectados. Ahora necesitamos hacer login con nuestro username y contraseña. Esto lo hacemos de la siguiente manera:

$pop->login("USERNAME", "CONTRASEÑA") or die("No se pudo hacer login: $!");

Sencillo, llamamos la función login a la cual enviamos dos argumentos, el USERNAME y la CONTRASEÑA. En caso de que el login sea incorrecto termina el proceso inmediatamente enviando un error.

Ya que hicimos el login correctamente, ahora vamos a sacar una lista de los mensajes que tenemos en el INBOX de la siguiente manera:

my $msgnums = $pop->list;

Llamamos a la función list la cual regresa una referencia a una hash con todos los mensajes que se lograron sacar del INBOX.

Para poder desplegar cada mensaje lo que hacemos es:

foreach my $msgnum (keys %$msgnums) {
my $msg = $pop->get($msgnum);
print @$msg;
}

Lo que hacemos aquí es un loop a través de cada una de las llaves de nuestro hash que contiene todos los mensajes, llamando con cada una la función get:

my $msg = $pop->get($msgnum);

Esta función recibe un solo argumento que es el id del mensaje.

Terminando de recibir los mensajes lo que debemos de hacer es terminar la conexión que lo hacemos de la siguiente manera:

$pop->quit;

Otras Funciones

Ya vimos como abrir una conexión y leer los mensajes que tenemos en el INBOX. Ahora vamos a ver otras funciones que tenemos disponibles en el módulo.




ELIMINAR MENSAJES

Si estamos haciendo una aplicación que descarga los mensajes a un disco local, quizá querramos la posibilidad de eliminar los mensajes del servidor una vez que ya los tenemos en nuestro disco.

Esto se hace de manera sencilla con la siguiente función:

$pop->delete($msgnum);

En esta función la variable $msgnum debe de contener el ID del mensaje que debemos de eliminar.

Como funciona la eliminación de los mensajes, es que no los borra sino que se crea una lista de mensajes por borrar. Los mensajes de la lista son eliminados en cuanto se cierra la conexión con quit.

En caso de que el proceso termine antes de que se logre llamar a la función quit, ningún mensaje es eliminado. Esto hace que nunca tengas mensajes perdidos por falla en el script.




EL ENCABEZADO DE LOS MENSAJES

Podemos usar la función top para recibir solamente el encabezado de los mensajes y si queremos las primeras líneas del mensaje:

my $encabezado = $pop->top($msgnum,No_LINEAS);

Aquí llamamos a la función top con dos argumentos, $msgnum que es el número de ID del mensaje y "No_LINEAS" que debe de ser el número de las líneas iniciales del mensaje que queremos recibir. Si por ejemplo quieres leer las dos primeras líneas de cada mensaje junto con el encabezado deberás de poner 2.




ÚLTIMO MENSAJE

Si lo que queremos es ver cual es el último mensaje recibido usaríamos la función last.

my $last_msgnum = $pop->last;

Al correr la función regresa el ID del último mensaje recibido en el INBOX.




ESTADÍSTICAS DEL INBOX

Podemos usar la función popstat que regresa la cantidad de mensajes por eliminar y el tamaño del INBOX en octetos.

my ($del_msg,$size) = $pop->popstat;

Como vemos regresa dos variables, $del_msg con la cantidad de mensajes por eliminar y $size con el tamaño del INBOX en octetos.




RESET

Si queremos restaurar el estado del INBOX, junto con esto restableciendo el estado de los mensajes por eliminar, lo hacemos con la función reste:

$pop->reset;

Al llamar esta función, todos los mensajes que habían sido puestos en la lista de por eliminar, son quitados de la lista, de esta manera se puede cerrar la conexión sin eliminar ningún mensaje.




Conclusión

Vimos como es sumamente sencillo poder conectarnos a nuestro mail y descargar nuestros mensajes con este tutorial.

Les recomiendo que hagan pruebas y ejercicios para que entiendan como funciona este módulo, aunque verán que no tiene mayor ciencia.

Si quieren leer la documentación original de este módulo, lo pueden hacer en:

http://search.cpan.org/~gbarr/libnet-1.19/Net/POP3.pm
¿Quiéres más tutoriales como este? Escribir tutoriales toma una gran cantidad de tiempo y esfuerzo. Si este tutorial te ayudó a aprender o a solucionar algo, por favor considera dejar alguna donación en apoyo a Perl en Español.

Cliquea en el botón de abajo para dejar tu donación por medio de PayPal.

Comparte:
Categorías de Tutoriales:
En Nuestros Foros:

    Software error:

    junk after document element at line 1, column 32, byte 32 at /usr/lib64/perl5/vendor_perl/XML/Parser.pm line 187.
    

    For help, please send mail to the webmaster ([email protected]), giving this error message and the time and date of the error.

  • Entra a los foros »
Socializa:
Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Perl en Español es mantenido con Movable Type
Todo el contenido de Perl en Español está bajo una licencia CC:
Creative Commons License