PDA

Visualizza la versione completa : Perl e letture mail


pigna
05-07-2004, 18:41
Ciao a tutti, sto' provando uno script per la lettura di una casella di posta.
Questo script dovrebbe collegarsi a un server pop, leggere i nuovi messaggi
e salvare gli allegati in una cartella, solo che non funziona, mi restituisce il seguente errore:


Use of uninitialized value in pattern match (m//) at
/usr/lib/perl5/site_perl/5.8.4/Mail/POP3Client.pm line 1012, <GEN0> line 2.
Broken pipe

Lo script non l'ho fatto io ma l'ho trovato in internet al seguetne indirizzo:
http://www.retelinux.it/rete/hylafax_sfmail.html (http://http://www.retelinux.it/rete/hylafax_sfmail.html)

e, come gia' detto, dovrebbe scaricare la posta da una casella mail,
salvare gli allegati in locale e poi eseguire altre operazioni (in questo caso invio di un fax).

Potete aiutaemi?
Grazie.

shishii
05-07-2004, 20:17
Ciao,

quel messaggio significa che alla riga indicata, 1012, del modulo POP3Client.pm stato usata un variabile non inizializzata, cio non dichiarata precedentemente, il che in genere si fa con:
my $nome_var;

La cosa sarebbe clamorosa poich quello un modulo usatissimo ed un errore del genere non concepibile infatti la riga 1012 riporta:


$line =~ /^\+OK/ or $me->Message($line) and return;

e come puoi vedere dal seguente codice che gli sta intorno la variabile inizializzata:


sub Capa {

my $me = shift;

# no state check here, all are allowed

$me->Alive() or return;

my @retarray = ();
my $ret = '';

$me->_sockprint('CAPA', $me->EOL());

my $line = $me->_sockread();
$line =~ /^\+OK/ or $me->Message($line) and return;

while(defined($line = $me->_sockread())) {
$line =~ /^\.\s*$/ and last;
$ret .= $line;
chomp $line;
push(@retarray, $line);
}

if ($ret) {
return wantarray ? @retarray : $ret;
}
}


la mia opinione che il file POP3Client.pm si sia corrotto per cui occorre sostituirlo.

pigna
06-07-2004, 10:32
Originariamente inviato da shishii
Ciao,

quel messaggio significa che alla riga indicata, 1012, del modulo POP3Client.pm stato usata un variabile non inizializzata, cio non dichiarata precedentemente, il che in genere si fa con:
my $nome_var;

La cosa sarebbe clamorosa poich quello un modulo usatissimo ed un errore del genere non concepibile infatti la riga 1012 riporta:


$line =~ /^\+OK/ or $me->Message($line) and return;

e come puoi vedere dal seguente codice che gli sta intorno la variabile inizializzata:


sub Capa {

my $me = shift;

# no state check here, all are allowed

$me->Alive() or return;

my @retarray = ();
my $ret = '';

$me->_sockprint('CAPA', $me->EOL());

my $line = $me->_sockread();
$line =~ /^\+OK/ or $me->Message($line) and return;

while(defined($line = $me->_sockread())) {
$line =~ /^\.\s*$/ and last;
$ret .= $line;
chomp $line;
push(@retarray, $line);
}

if ($ret) {
return wantarray ? @retarray : $ret;
}
}


la mia opinione che il file POP3Client.pm si sia corrotto per cui occorre sostituirlo.

Ma se l'ho appena installato? E' possibile che sia gia' corrotto?

Comunque adesso provero' ad installare una versione piu' vecchia, come faccioa disinstallare quello attualmente installato?

shishii
06-07-2004, 17:05
ma cosa c'entra "si gi corrotto"?

i file si possono corrompere in qualunque momento, mica sono come le scarpe che si bucano solo con l'uso!

sostituisci il file in questione con una copia sicura dello stesso file.

pigna
06-07-2004, 18:00
Originariamente inviato da shishii
ma cosa c'entra "si gi corrotto"?

i file si possono corrompere in qualunque momento, mica sono come le scarpe che si bucano solo con l'uso!

sostituisci il file in questione con una copia sicura dello stesso file.

Ho risolto, non era il problema del file corrotto ma il numero di parametri passati errati, ne "mancavano" alcuni :master:

Loading