• Publicidad

Comprobar correo para realizar una acción

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Comprobar correo para realizar una acción

Notapor mortenol » 2012-10-09 11:41 @529

Buenas a todos.

Quiero chequear el asunto de los correos de una determinada carpeta de mi buzón para buscar una cadena en concreto y si la encuentra lanzar otra operación.

Estoy probando con:

http://search.cpan.org/~plobbes/Mail-IM ... Client.pod

pero mi nivel en Perl es bajo y me pierdo.

¿Voy por el camino adecuado? ¿Existe algún módulo más fácil para hacer lo que quiero?

Saludos.
mortenol
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2012-03-26 05:24 @267

Publicidad

Re: Comprobar correo para realizar una acción

Notapor explorer » 2012-10-09 16:08 @714

¿El servidor de correo sigue el protocolo IMAP?

Para acceder a un servidor de correo necesitarás saber la dirección o nombre de ese servidor de correo, un nombre de usuario y contraseña y qué protocolo de correo usar (POP3 o IMAP4).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Comprobar correo para realizar una acción

Notapor mortenol » 2012-10-09 16:29 @728

Sí utiliza IMAP.

Este es mi script:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use Mail::IMAPClient;
  4. use IO::Socket::SSL;
  5.  
  6. my $socket = IO::Socket::SSL->new(
  7.    PeerAddr => 'servidor',
  8.    PeerPort => 993,
  9.   )
  10.   or die "socket(): $@";
  11.  
  12. my $client = Mail::IMAPClient->new(
  13.    Socket   => $socket,
  14.    User     => 'usuario',
  15.    Password => 'password',
  16.   )
  17.   or die "new(): $@";
  18.  
  19. print "I'm authenticated\n" if $client->IsAuthenticated();
  20. my @folders = $client->folders();
  21. print join("\n* ", 'Folders:', @folders), "\n";
  22.  
  23.  
  24. $client->select("correos");
  25.  
  26. my $msgs = $client->search("ALL");
  27. for my $h (values %{ $client->parse_headers( $msgs , "Subject", "Date") } )
  28.   {
  29.         print map { "$_:\t$h->{$_}[0]\n"} keys %$h;
  30.   }
  31.  
  32. $client->logout();
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Existe otra función que es get_header (creo recordad) que es más simple que parse_headers. ¿Quizás tengo que utilizar esa?

La historia es que para ser novato me resulta difícil utilizar este módulo de Perl y quería saber si hay alguna forma más sencilla.

P.D: No quiero que me escriban código, ¡¡¡¡quiero aprender!!!!
mortenol
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2012-03-26 05:24 @267

Re: Comprobar correo para realizar una acción

Notapor explorer » 2012-10-09 17:17 @762

Según la documentación del módulo Mail::IMAPClient, no necesitas crear un objeto IO::Socket::SSL, sino que con poner la opción Ssl => 1, ya es suficiente.

Hay que pensar la jugada... podemos optar por la táctica de ver qué nuevos mensajes han llegado desde una determinada fecha (método since() o sentsince()), extraerles el asunto (método subject()), y si coincide con lo que queremos, lo procesamos y luego borramos el mensaje (delete_message()). Y purgamos la carpeta con expunge().

Otra táctica: si sabemos que es un buzón de correo solo para nosotros, pues recuperamos la lista de todos los mensajes, los procesamos y luego los borramos.

O también: usar search() indicando qué cadena o subcadena de caracteres estás esperando en el asunto.

El módulo si que puede ser algo complicado de manejar. Puedes probar a usar Net::IMAP::Simple, que parece un poco más simple.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Comprobar correo para realizar una acción

Notapor mortenol » 2012-10-15 10:55 @496

Al final estoy usando el Net::IMAP::Simple pero no logro conectar con el servidor de Gmail. Sin embargo con Mail::IMAPClient lo podía hacer sin problemas con los mismos datos de conexión.

He intentado depurar el script y me dice:"unable to connect".

La historia es que no me muestra ningún error al ejecutar el I, se queda como intentando conectar.

¿Alguna idea por lo que puede ser?

Ya he visto en ejemplos que la mayoría utilizan Mail::IMAPClient.
mortenol
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2012-03-26 05:24 @267

Re: Comprobar correo para realizar una acción

Notapor explorer » 2012-10-15 12:22 @557

¿Activaste la opción use_ssl => 1?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Comprobar correo para realizar una acción

Notapor mortenol » 2012-10-16 09:13 @425

¡¡¡¡Gracias!!!!

Ya tengo la primera parte solucionada. Lo que hago es mirar el asunto del correo y compruebo si coincide con un patrón que busco. Si es así, accedo a una URL, donde introduzco un usuario y password en un formulario de acceso y realizo una tarea con el acceso concedido en la web.

Para la segunda parte quiero utilizar la libcurl.

http://search.cpan.org/~szbalint/WWW-Cu ... WW/Curl.pm

Ya os cuento.
mortenol
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2012-03-26 05:24 @267

Re: Comprobar correo para realizar una acción

Notapor explorer » 2012-10-16 09:39 @444

JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Comprobar correo para realizar una acción

Notapor mortenol » 2012-10-21 10:01 @459

Resulta que el botón del submit del formulario donde tengo que poner el usuario y la contraseña ejecuta un JavaScript que comprueba que el navegador sea compatible (entre otras cosas). Vamos, que tiene JavaScript.

He leído que WWW::Mechanize no se entiende muy bien con los JavaScript.

¿LWP es la opción que me queda?
mortenol
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2012-03-26 05:24 @267

Re: Comprobar correo para realizar una acción

Notapor explorer » 2012-10-21 11:37 @526

Si el código JavaScript de la página solo comprueba qué navegador es, y que el formulario está bien, y a continuación realiza la llamada POST (envía el formulario al servidor), entonces no hay problemas en obviarlo.

Es decir: no pienses en hacer un código que pulse un botón en una página web, si no solo en que tienes que hacer una petición POST a una determinada URL. Esa URL es la que está escondida en el código JavaScript. Y el servidor la recibirá pensando que ha pasado por el filtro de su JavaScript, pero no ha sido así.

Y eso lo puedes hacer con LWP o con WWW::Mechanize o cualquier otro entorno de rascado web de Perl.

En CPAN hay algunos módulos que son capaces de interpretar JavaScript, pero si el código que estás intentando saltar es muy simple, no tienes más que analizar qué hace y saltarlo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 15 invitados