Problem mit NET::POP3

Problem mit NET::POP3

am 08.05.2006 11:03:56 von df4or

Tag.

Man möge mir verzeihen falls das nicht die bestmögliche aller NGs ist...

Situation:
Ein Perl-Script verwendet Net::POP3 Vers. 2.28 um regelmässig Mails
abzuholen. Geht auch seit ca. 2 Jahren bestens, nun klemmt es seit einigen
Tagen manchmal, nicht immer.

Seit einigen Tagen bekomme ich im Fehlerfall folgende Mail zugestellt:

Use of uninitialized value in numeric eq (==) at
/usr/lib/perl5/5.8.3/Net/POP3.pm line 315, line 49.

POP3.pm hat an Zeile 315
sub _QUIT { shift->command('QUIT')->response() == CMD_OK }

CMD_OK ist in einem anderen Modul deklariert, Wert 2.

Da ich mich mit OOPerl nicht so supertoll auskenne, hier meine
Perl-relevante Frage:
Gehe ich recht in der Annahme das mit "shift->command('QUIT')->response()"
ein entsprechendes Objekt aufgerufen wird und der Responsecode des POP3
Protokolles zurückgeliefert werden soll? Der Vergleich auf CMD_OK sorgt
dann dafür das _QUIT True oder False zurückliefert, oder?

Was ich nicht verstehe ist warum in manchen Fällen der Responsecode auf
'QUIT' undef ist. Leider bietet Net::POP3 keine weiteren
Diagnosemöglichkeiten, soweit ich sehe. Mir ist klar, daß das nix mehr mit
Perl zu tun hat, ich will hier nur erstmal die Grundlagen klären. Alles
weitere müsste ich dann wohl in einem Trace rausbekommen...

Danke,
Ekki

Re: Problem mit NET::POP3

am 09.05.2006 02:28:25 von Oliver Block

Ekki Plicht wrote:

> Seit einigen Tagen bekomme ich im Fehlerfall folgende Mail zugestellt:
>
> Use of uninitialized value in numeric eq (==) at
> /usr/lib/perl5/5.8.3/Net/POP3.pm line 315, line 49.

Was steht in Zeile 49 Deines Skripts? (im Kontext)

Gruss,

Oliver

Re: Problem mit NET::POP3

am 09.05.2006 08:23:12 von Slaven Rezic

Oliver Block writes:

> Ekki Plicht wrote:
>
> > Seit einigen Tagen bekomme ich im Fehlerfall folgende Mail zugestellt:
> >
> > Use of uninitialized value in numeric eq (==) at
> > /usr/lib/perl5/5.8.3/Net/POP3.pm line 315, line 49.
>
> Was steht in Zeile 49 Deines Skripts? (im Kontext)
>

Die Zeile 49 bezieht sich auf den Filehandle INFILE.

--
Slaven Rezic - slaven rezic de

Start a WWW browser - OS independent:
http://user.cs.tu-berlin.de/~eserte/src/perl/WWWBrowser/

Re: Problem mit NET::POP3

am 09.05.2006 11:13:37 von df4or

Am Tue, 09 May 2006 02:28:25 +0200 schrieb Oliver Block:

> Ekki Plicht wrote:
>
>> Seit einigen Tagen bekomme ich im Fehlerfall folgende Mail zugestellt:
>>
>> Use of uninitialized value in numeric eq (==) at
>> /usr/lib/perl5/5.8.3/Net/POP3.pm line 315, line 49.
>
> Was steht in Zeile 49 Deines Skripts? (im Kontext)

Wie Slaven schon schrieb, es handelt sich hier um die 49 Eingabezeile von
INFILE, das dürfte Bestandteil des POP3-Streams sein. Da komme ich leider
nicht dran.
Wie gesagt, Net::Pop3 bietet da leider keine Diagnose. Alles weitere würde
ich wahrscheinlich nur über einen Trace auf der phys. Schnittstelle
rausbekommen. Das ist bei einem Fehler der nur einmal alle paar Tage
auftritt _äusserst_ wenig recovery.


Gruß,
Ekki

Re: Problem mit NET::POP3

am 09.05.2006 12:05:14 von Christian Lackas

* Ekki Plicht [2006-05-08]:

Hallo Ekki,

> Situation:
> Ein Perl-Script verwendet Net::POP3 Vers. 2.28 um regelmässig Mails
> abzuholen. Geht auch seit ca. 2 Jahren bestens, nun klemmt es seit einigen
> Tagen manchmal, nicht immer.

ich habe ja immer Mail::POP3Client vorgezogen.

http://search.cpan.org/~sdowd/Mail-POP3Client-2.17/POP3Clien t.pm

Die Net::* Module sind nur für Leute, die sich um sämtliche
Fehlerbehandlung gerne selbst kümmern.

> Use of uninitialized value in numeric eq (==) at
> /usr/lib/perl5/5.8.3/Net/POP3.pm line 315, line 49.
> POP3.pm hat an Zeile 315
> sub _QUIT { shift->command('QUIT')->response() == CMD_OK }
> CMD_OK ist in einem anderen Modul deklariert, Wert 2.
> Da ich mich mit OOPerl nicht so supertoll auskenne, hier meine
> Perl-relevante Frage:
> Gehe ich recht in der Annahme das mit "shift->command('QUIT')->response()"
> ein entsprechendes Objekt aufgerufen wird und der Responsecode des POP3
> Protokolles zurückgeliefert werden soll? Der Vergleich auf CMD_OK sorgt
> dann dafür das _QUIT True oder False zurückliefert, oder?

Ja.

> Was ich nicht verstehe ist warum in manchen Fällen der Responsecode auf
> 'QUIT' undef ist. Leider bietet Net::POP3 keine weiteren
> Diagnosemöglichkeiten, soweit ich sehe.

Hast du es mit

my $pop = Net::POP3->new('pop3host', Debug => 1) or die;

schonmal versucht? Da Net::POP3 auch auf Net::Cmd basiert (siehe auch
dort) solltest du damit den gesamten Nachrichtenverkehr sehen.

> Mir ist klar, daß das nix mehr mit Perl zu tun hat, ich will hier nur
> erstmal die Grundlagen klären. Alles weitere müsste ich dann wohl in
> einem Trace rausbekommen...

Und dann solltest du einfach mal einen erfolgreichen mit einem
fehlgeschlagenen Durchlauf vergleichen...

Gruß
Christian

--
Murphys Law 3: Zur Lösung von Problemen hat jede beteiligte Person
mindestens einen Plan, der nicht funktioniert.
http://www.lackas.net/ Perl Delphi Linux MP3 Searchengines Domainchecker

Re: Problem mit NET::POP3

am 09.05.2006 13:07:19 von Oliver Block

Ekki Plicht wrote:

> Am Tue, 09 May 2006 02:28:25 +0200 schrieb Oliver Block:
>
>> Ekki Plicht wrote:
>>
>>> Seit einigen Tagen bekomme ich im Fehlerfall folgende Mail zugestellt:
>>>
>>> Use of uninitialized value in numeric eq (==) at
>>> /usr/lib/perl5/5.8.3/Net/POP3.pm line 315, line 49.
>>
>> Was steht in Zeile 49 Deines Skripts? (im Kontext)
>
> Wie Slaven schon schrieb, es handelt sich hier um die 49 Eingabezeile von
> INFILE, das dürfte Bestandteil des POP3-Streams sein. Da komme ich leider
> nicht dran.

>>> sub _QUIT { shift->command('QUIT')->response() == CMD_OK }

Die Methode stammt aus Net::Cmd, siehe 'sub command/sub response/sub
getline' in:



Gruss,

Oliver