• Jueves 18 de Abril de 2024, 19:14

Autor Tema:  consejo sobre IMAP y pregunta sobre POP3Client  (Leído 3316 veces)

proxy_lainux

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
consejo sobre IMAP y pregunta sobre POP3Client
« en: Viernes 15 de Mayo de 2009, 07:36 »
0
hola

dos preguntas, cual modulo me recomiendan usar para revisar mi correo, ahorita estoy usando Mail::POP3Client, y me dijeron que si queria revisar  mi correo y revisar bandeja de entrada, basurero, borradores, etc, que mejor usara IMAP, pero cual modulo de IMAP me recomiendan usar?

Tambie quisiera saber si es posible hacer esto... para revisar un mensaje hago esto

$reco = Mail::POP3Client->new(USER => $mem1[0],
                              PASSWORD => $mem1[1],
                              HOST => $mem1[2],
                              USESSL => $mem1[3],
);

foreach($reco->Head(1)){
$buff1->insert_at_cursor(/^(Subject):s+/&& $_);
$tev2->set_buffer($buff1);
$reco->Close();
}

pero quisiera que en un TextEntry al escribir algun numero y al oprimir un boton, Head reciba el numero y me muestre el mensaje 4... pero no se si tengo que repetir todo el codigo de Mail::POP3Client en signal_connect del boton, o hay alguna manera de que siempre se mantenga conectado y solo al oprimir el boton Head retome el numero y me muestre el mensaje?

yo hacia algo parecido en C y usaba un while para que el socket se mantuviera conectado, pero en perl no se si se pueda hacer lo mismo, o sera que tengo que conectarme mediante el modulo POP3Client a mi cuenta por cada mensaje que quiera revisar?

y la segunda, es que al realizar una ventana con gtk... con un boton ejecuto una funcion donde hago otra ventana, pero no se de que manera cerrar la segunda ventana sin cerrar la primera

ya que Gtk2->main_quit;
y
exit;

me cierran todo, y lo que quiero es cerrar unicamente la segunda ventana, alguien sabe como hacer eso?

salu2  :lol:

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: consejo sobre IMAP y pregunta sobre POP3Client
« Respuesta #1 en: Sábado 16 de Mayo de 2009, 17:34 »
0
Citar
cual modulo de IMAP me recomiendan usar?
Net::IMAP::Client
Citar
Tambie quisiera saber si es posible hacer esto... para revisar un mensaje hago esto
De hecho, lo haces mal... mira bien la documentacion del modulo, ahi te ponen un buen ejemplo:
Código: Perl
  1. use Mail::POP3Client;
  2.   $pop = new Mail::POP3Client( USER     => "me",
  3.                                PASSWORD => "mypassword",
  4.                                HOST     => "pop3.do.main" );
  5. # Por cada mail
  6.   for( $i = 1; $i <= $pop->Count(); $i++ ) {
  7.     foreach( $pop->Head( $i ) ) { # tomamos el head
  8.       /^(From|Subject):s+/i && print $_, "n";
  9.     }
  10.   }
  11.   $pop->Close();
  12.  
Y eso es muy diferente a lo que estas haciendo, tu estas tratando de obtener el encabezado de un correo, sin comprobar que existe, o que si hay coreo.
Citar
pero quisiera que en un TextEntry al escribir algun numero y al oprimir un boton, Head reciba el numero y me muestre el mensaje 4... pero no se si tengo que repetir todo el codigo de Mail::POP3Client en signal_connect del boton, o hay alguna manera de que siempre se mantenga conectado y solo al oprimir el boton Head retome el numero y me muestre el mensaje?
Ahi cambia un poco las reglas, en la funcion del boton, tienes que repetir solo la parte de $pop->Head($numero) y $numero tiene que ser menor o igual a $pop->Count().
Asi que si, si se puede.
Citar
yo hacia algo parecido en C y usaba un while para que el socket se mantuviera conectado, pero en perl no se si se pueda hacer lo mismo, o sera que tengo que conectarme mediante el modulo POP3Client a mi cuenta por cada mensaje que quiera revisar?
No, mira el ejmplo, primero ven cuantos mensajes hay, luego toman el header e imprimen la line que sea un "subject" o "from" y luego cierran la conexion con $pop->Close().
Podes hacer lo que quieres antes de usar Close() sin tener que conectarte de nuevo al servidor.
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

proxy_lainux

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: consejo sobre IMAP y pregunta sobre POP3Client
« Respuesta #2 en: Domingo 17 de Mayo de 2009, 08:51 »
0
hola

se me olvido especificar cosas

lo que hago es abrir un fichero open(MAIL, "<mail,txt") y guardo los datos en un array

chomp(my @mem1 = <MAIL>);

y los uso donde corresponden

USER => mem1[0],
PASS => mem2[1],

y head le coloco por ahora el numero del mensaje que quiero ver

foreach($reco->Head(1))

solo que no se si para revisar cada mensaje, hay la posibilidad de mantener la conexion activa de mi correo para solo pedirle a Head y Body que me muestre el mensaje que quiero, mediante signal_connect de un boton.

el numero del mensaje sera tomado con get_text de una caja de texto, porque uso Count() en un label para saber la cantidad de mensajes de mi correo, y solo me faltaria colocar el numero del mensaje en un Entry para que al presionar un boton, me muestre el mensaje, pero como menciono nose si es posible mantener la conexion activa para solo tener que usar Head y Body, o tengo que conectarme a mi correo para ver cada mensaje

por ejemplo

tengo que hacer siempre esto por cada mensaje

Código: Perl
  1. signal_connect(clicked => sub{
  2. $mejs->get_text;
  3.  
  4. $reco = Mail::POP3Client->new(USER => $mem1[0],
  5.                               PASSWORD => $mem1[1],
  6.                               HOST => $mem1[2],
  7.                               USESSL => $mem1[3],
  8. );
  9.  
  10. foreach($reco->Head($mejs)){
  11. $buff1->insert_at_cursor(/^(Subject):s+/&& $_);
  12. $tev2->set_buffer($buff1);
  13. $reco->Close;
  14.  

o hay la forma de hacer esto

Código: Perl
  1. signal_connect(clicked => sub{
  2. $mejs->get_text;
  3.  
  4. foreach($reco->Head($mejs)){
  5. $buff1->insert_at_cursor(/^(Subject):s+/&& $_);
  6. $tev2->set_buffer($buff1);
  7. $reco->Close;
  8.  

si ven ya no me tengo que conectar todo el tiempo, solo le pide a Head y Body cual mensaje quiero ver

y sobre lo de gtk de la segunda ventana, lo que pasa es que cuando lo oprimo se guarda los datos de mi correo, como usuario, contraseña,etc, pero tengo que cerrarla despues de oprimir, con los botones de arriba, y me gustaria que al oprimir el boton se cierre esa ventana para poder usar la primera...

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: consejo sobre IMAP y pregunta sobre POP3Client
« Respuesta #3 en: Domingo 17 de Mayo de 2009, 22:07 »
0
Primero, lo primero...
  • Por favor, usa el pragma strict (use strict;).
  • Declara las variables con my a medida en que las usas o sea necesario.
Ahora, te pongo la idae del codigo:
Código: Perl
  1. #!/usr/bin/perl
  2. use strict;
  3. use Mail::POP3Client;
  4. use Gtk2 '-init'; # creo que era asi
  5.  
  6. open MAIL, "mail.txt" or die "Error al abrir mail.txt: $!n";
  7. chomp(my @mem1 = <MAIL>);
  8. close MAIIL;
  9.  
  10. my $reco = Mail::POP3Client->new(
  11.     USER     => $mem1[0],
  12.     PASSWORD => $mem1[1],
  13.     HOST     => $mem1[2],
  14.     USESSL   => $mem1[3],
  15.  );
  16. # Codigo de GTK...
  17. signal_connect(clicked => sub{
  18.    my $mejs = $botton->get_text;
  19.    die "El texto debe ser numerico" if $mejs !~ /d+/;
  20.  
  21.    foreach($reco->Head($mejs)){
  22.        $buff1->insert_at_cursor(/^(Subject):s+/&& $_);
  23.        $tev2->set_buffer($buff1);
  24.    }
  25. });
  26. $reco->Close;
  27. Gtk2->main();
  28.  
  29.  
Espero que lo entiendas, y nuevamente... lee la documentacion del modulo.
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.