Impossible de faire fonctionner la m=E9thode get du module Net::POP3
#!/usr/bin/perl =20
use Net::POP3;
$pop =3D Net::POP3->new('pop3.domaine.com') or print "ne peut me =
connecter au serveur POP\n<br>";
$num =3D $pop->login( 'login','pass' ); # ok on r=E9cup=E8re bien le =
nombre de messages
$size =3D $pop->list(1); # ok on r=E9cup=E8re =
bien la taille du 1er
$get =3D $pop->get(1,FH); # ici plus rien
print "Fin"; # ne s'affiche =
pas
Si quelqu'un voit ce que je ne vois pas, je suis preneur.
Merci
K
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jerome Quelin
Kloug wrote:
$get = $pop->get(1,FH); # ici plus rien
normal... FH n'est rien pour toi - ni pour ton interpréteur perl, ce qui est plus grave ! :-)
d'après la doc : [...] get ( MSGNUM [, FH ] ) Get the message MSGNUM from the remote mailbox. If FH is not given then get returns a reference to an array which contains the lines of text read from the server. If FH is given then the lines returned from the server are printed to the filehandle FH. [...]
dans ton script, FH est traité comme une chaîne par perl. ce qui est mal, vu que perl va s'en servir comme d'un filehandle. résultat non garanti.
donc voici comment faire pour récupérer les lignes du message (non testé) :
my $lines = $pop->get(1);
et après tu utiliseras $lines comme tu veux : print for @$lines; # prints the message my $nb = scalar(@$lines); # number of lines
si tu veux imprimer dans un fichier (ou dans un filehandle quelconque), alors il faut en effet utiliser la forme à 2 arguments : open my $fh, '>', $path_to_file or die "can't open '$path_to_file': $!n"; $pop->get(1, $fh); # prints message to $fh close $fh;
bien sûr, si tu veux imprimer sur la sortie standard, autant faire : $pop->get(1, *STDOUT); # dumps mail to stdout
un conseil, ajoute les lignes : use strict; use warnings;
en haut de ton script, qui permettront à perl de s'apercevoir de ces problèmes et de t'envoyer une erreur. perldoc strict pour plus de détails.
cdlt, jérôme --
Kloug wrote:
$get = $pop->get(1,FH); # ici plus rien
normal... FH n'est rien pour toi - ni pour ton interpréteur perl, ce qui est
plus grave ! :-)
d'après la doc :
[...]
get ( MSGNUM [, FH ] )
Get the message MSGNUM from the remote mailbox. If FH is not given then
get returns a reference to an array which contains the lines of text read
from the server. If FH is given then the lines returned from the server are
printed to the filehandle FH.
[...]
dans ton script, FH est traité comme une chaîne par perl. ce qui est mal, vu
que perl va s'en servir comme d'un filehandle. résultat non garanti.
donc voici comment faire pour récupérer les lignes du message (non testé) :
my $lines = $pop->get(1);
et après tu utiliseras $lines comme tu veux :
print for @$lines; # prints the message
my $nb = scalar(@$lines); # number of lines
si tu veux imprimer dans un fichier (ou dans un filehandle quelconque),
alors il faut en effet utiliser la forme à 2 arguments :
open my $fh, '>', $path_to_file
or die "can't open '$path_to_file': $!n";
$pop->get(1, $fh); # prints message to $fh
close $fh;
bien sûr, si tu veux imprimer sur la sortie standard, autant faire :
$pop->get(1, *STDOUT); # dumps mail to stdout
un conseil, ajoute les lignes :
use strict;
use warnings;
en haut de ton script, qui permettront à perl de s'apercevoir de ces
problèmes et de t'envoyer une erreur. perldoc strict pour plus de détails.
normal... FH n'est rien pour toi - ni pour ton interpréteur perl, ce qui est plus grave ! :-)
d'après la doc : [...] get ( MSGNUM [, FH ] ) Get the message MSGNUM from the remote mailbox. If FH is not given then get returns a reference to an array which contains the lines of text read from the server. If FH is given then the lines returned from the server are printed to the filehandle FH. [...]
dans ton script, FH est traité comme une chaîne par perl. ce qui est mal, vu que perl va s'en servir comme d'un filehandle. résultat non garanti.
donc voici comment faire pour récupérer les lignes du message (non testé) :
my $lines = $pop->get(1);
et après tu utiliseras $lines comme tu veux : print for @$lines; # prints the message my $nb = scalar(@$lines); # number of lines
si tu veux imprimer dans un fichier (ou dans un filehandle quelconque), alors il faut en effet utiliser la forme à 2 arguments : open my $fh, '>', $path_to_file or die "can't open '$path_to_file': $!n"; $pop->get(1, $fh); # prints message to $fh close $fh;
bien sûr, si tu veux imprimer sur la sortie standard, autant faire : $pop->get(1, *STDOUT); # dumps mail to stdout
un conseil, ajoute les lignes : use strict; use warnings;
en haut de ton script, qui permettront à perl de s'apercevoir de ces problèmes et de t'envoyer une erreur. perldoc strict pour plus de détails.
cdlt, jérôme --
Kloug
d'après la doc : get ( MSGNUM [, FH ] )
Merci pour tout. Cependant, j'aimerais bien comprendre pourquoi on ne peut utiliser une méthode telle qu'elle est décrite dans la doc. Par ailleurs, un article des Mongueurs de Perl http://articles.mongueurs.net/magazines/linuxmag61.html décrit la chose comme possible my $get = $pop->get(1, FH) if $pop->login('lettre_mensuelle', 'secret') > 0; my $parser = MIME::Parser->new(); my $entity = $parser->parse(*FH);
Je ne voudrais pas mourir idiot. Merci encore K
d'après la doc :
get ( MSGNUM [, FH ] )
Merci pour tout.
Cependant, j'aimerais bien comprendre pourquoi
on ne peut utiliser une méthode telle qu'elle est
décrite dans la doc.
Par ailleurs, un article des Mongueurs de Perl
http://articles.mongueurs.net/magazines/linuxmag61.html
décrit la chose comme possible
my $get = $pop->get(1, FH) if $pop->login('lettre_mensuelle', 'secret') > 0;
my $parser = MIME::Parser->new();
my $entity = $parser->parse(*FH);
Merci pour tout. Cependant, j'aimerais bien comprendre pourquoi on ne peut utiliser une méthode telle qu'elle est décrite dans la doc. Par ailleurs, un article des Mongueurs de Perl http://articles.mongueurs.net/magazines/linuxmag61.html décrit la chose comme possible my $get = $pop->get(1, FH) if $pop->login('lettre_mensuelle', 'secret') > 0; my $parser = MIME::Parser->new(); my $entity = $parser->parse(*FH);
Je ne voudrais pas mourir idiot. Merci encore K
Kloug
get ( MSGNUM [, FH ] )
Effectivement pour manipuler un FH, encore faut il l'ouvrir !
Merci K
get ( MSGNUM [, FH ] )
Effectivement pour manipuler un FH, encore faut il
l'ouvrir !