Net::POP3

Le
Kloug
Bonjour,

Impossible de faire fonctionner la méthode get du module Net::POP3

#!/usr/bin/perl
use Net::POP3;
$pop = Net::POP3->new('pop3.domaine.com') or print "ne peut me =
connecter au serveur POP<br>";
$num = $pop->login( 'login','pass' ); # ok on récupère bien le =
nombre de messages
$size = $pop->list(1); # ok on récupère =
bien la taille du 1er
$get = $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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jerome Quelin
Le #153125
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
Le #153124
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

Kloug
Le #153123
get ( MSGNUM [, FH ] )


Effectivement pour manipuler un FH, encore faut il
l'ouvrir !

Merci
K

Publicité
Poster une réponse
Anonyme