Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Net::POP3

3 réponses
Avatar
Kloug
Bonjour,

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

3 réponses

Avatar
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
--


Avatar
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

Avatar
Kloug
get ( MSGNUM [, FH ] )


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

Merci
K