Programación Web y Scripting > Perl
consejo sobre IMAP y pregunta sobre POP3Client
(1/1)
proxy_lainux:
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 -:
--- Citar ---cual modulo de IMAP me recomiendan usar?
--- Fin de la cita ---
Net::IMAP::Client
--- Citar ---Tambie quisiera saber si es posible hacer esto... para revisar un mensaje hago esto
--- Fin de la cita ---
De hecho, lo haces mal... mira bien la documentacion del modulo, ahi te ponen un buen ejemplo:
--- Código: Perl ---use Mail::POP3Client; $pop = new Mail::POP3Client( USER => "me", PASSWORD => "mypassword", HOST => "pop3.do.main" );# Por cada mail for( $i = 1; $i <= $pop->Count(); $i++ ) { foreach( $pop->Head( $i ) ) { # tomamos el head /^(From|Subject):s+/i && print $_, "n"; } } $pop->Close(); 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?
--- Fin de la cita ---
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?
--- Fin de la cita ---
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.
proxy_lainux:
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 ---signal_connect(clicked => sub{$mejs->get_text; $reco = Mail::POP3Client->new(USER => $mem1[0], PASSWORD => $mem1[1], HOST => $mem1[2], USESSL => $mem1[3],); foreach($reco->Head($mejs)){$buff1->insert_at_cursor(/^(Subject):s+/&& $_);$tev2->set_buffer($buff1);$reco->Close;
o hay la forma de hacer esto
--- Código: Perl ---signal_connect(clicked => sub{$mejs->get_text; foreach($reco->Head($mejs)){$buff1->insert_at_cursor(/^(Subject):s+/&& $_);$tev2->set_buffer($buff1);$reco->Close;
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 -:
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 ---#!/usr/bin/perluse strict;use Mail::POP3Client;use Gtk2 '-init'; # creo que era asi open MAIL, "mail.txt" or die "Error al abrir mail.txt: $!n";chomp(my @mem1 = <MAIL>);close MAIIL; my $reco = Mail::POP3Client->new( USER => $mem1[0], PASSWORD => $mem1[1], HOST => $mem1[2], USESSL => $mem1[3], );# Codigo de GTK...signal_connect(clicked => sub{ my $mejs = $botton->get_text; die "El texto debe ser numerico" if $mejs !~ /d+/; foreach($reco->Head($mejs)){ $buff1->insert_at_cursor(/^(Subject):s+/&& $_); $tev2->set_buffer($buff1); }});$reco->Close;Gtk2->main(); Espero que lo entiendas, y nuevamente... lee la documentacion del modulo.
Navegación
Ir a la versión completa