Superuser

Autor Thema: Perl: Mail::IMAPClient macht Probleme beim Zugriff auf IMAPd  (Gelesen 9499 mal)

juedan

  • Gast
Moin Perl-Sonnen ;D

Ein gutes und sonnenreiches neues Jahr.

Auf meinem Netzwerkserver mit OpenSolaris 11 ist Courier-IMAP installiert. Konfiguriert ist der Daemon so, daß ein Zugriff über SSL stattfindet, was auch mit Thunderbird und Evolution sauber funktioniert. Zusätzlich sind auch zwei Postfächer für Spam und NoSpam angelegt, in welche die User ihre Spams bzw. fälsch erkannten Spams verschieben oder per Forwarding hinschicken. Wie geschrieben, das funktioniert alles bestens.

Um den Spam/NoSpam zu verarbeiten, habe ich ein Perl-Script gebastelt, das sich am Server anmeldet und die Postfächer Spam bzw. NoSpam ausliest und die Nachrichten an SpamAssassin zur weiteren Verarbeitung schickt. Genau hier ist das Problem:
  • Wenn das Skript im Perl-Debugger läuft funktioniert es prächtig und macht was es soll. Die Anmeldung wird im Logfile protokolliert.
  • Wenn es nicht im Perl-Debugger läuft, dann kann es sich nicht mit dem IMAP verbinden und es kommt nach einer ganzen Weile diese Ausgabe:
ERROR: Socket closed while reading data from server.
Sending: 1 LOGIN "spam@heim.netz" spam123
Sent 45 bytes
ERROR: Socket closed while reading data from server.
Sending: 2 SELECT INBOX
Sent 16 bytes
ERROR: Socket closed while reading data from server.
Sending: 3 STATUS INBOX (MESSAGES)
Sent 27 bytes
ERROR: Socket closed while reading data from server.
Es liegen  Spam-Nachrichten zur Verarbeitung vor
Sending: 4 EXPUNGE
Sent 11 bytes
ERROR: Socket closed while reading data from server.
Sending: 5 SELECT
Sent 11 bytes
ERROR: Socket closed while reading data from server.
Sending: 6 CLOSE
Sent 9 bytes
ERROR: Socket closed while reading data from server.
Sending: 7 LOGOUT
Sent 10 bytes
ERROR: Socket closed while reading data from server.
    Der SSL-Socket wird erstellt. Bei "Mail::IMAPClient->new()" bleibt das Skript fast eine Minute stehen und dann kommen obige Meldungen auf einen Schlag.
    Im Logfile stehen auch keine Anmeldeversuche drin.
    Was ist an dem Skript falsch bzw. wo kann ich noch suchen?
    [/li]

Auszug aus dem Skript:
[        # Initialisiere Objekt SSL-Socket
        # ----------------------------------------------------------
        my $ssl = IO::Socket::SSL->new(
                Proto => 'tcp',
                PeerAddr => $host,
                PeerPort => 993);

        if (!defined($ssl)) {
                die "SSL-Socket nicht erstellt\n";}

        my $greeting = <$ssl>;
        my ($id, $answer) = split /\s+/, $greeting;
        if ($answer ne 'OK') {
                die "Problem beim Verbinden mit dem SSL-Socket: ", $ssl=>errstr(); }

        # Initialisiere Objekt IMAPClient zur Spam-Verarbeitung
        # ----------------------------------------------------------
        my $imap = Mail::IMAPClient->new(
                User     => $user,
                Password => $user_pw,
                Socket   => $ssl,
                Timeout  => 1,
                Debug    => 1);

        if (!defined($imap)) {
                die $aktion, ": IMAP nicht erstellt\n";}

        # Status explizit auf connected setzen
        $imap->State($imap->Connected());
/code]

Vielen Dank für Eure Hilfe.

Juedan

sonnenblen.de - Das unabhängige Sun User Forum


juedan

  • Gast
Re: Perl: Mail::IMAPClient macht Probleme beim Zugriff auf IMAPd
« Antwort #1 am: 05. Januar 2009, 17:23:12 »
Hallo Forum,

hat keine eine Idee, woran es liegen könnte?

Grüße

JueDan

claus

  • Gast
Re: Perl: Mail::IMAPClient macht Probleme beim Zugriff auf IMAPd
« Antwort #2 am: 05. Januar 2009, 22:21:25 »
Hallo,

ehrlich gesagt glaube ich eher, dass das ein code bzw Perl Problem ist als alles andere, wegen:

Zitat
# Wenn das Skript im Perl-Debugger läuft funktioniert es prächtig und macht was es soll. Die Anmeldung wird im Logfile protokolliert.
# Wenn es nicht im Perl-Debugger läuft, dann kann es sich nicht mit dem IMAP verbinden und es kommt nach einer ganzen Weile diese Ausgabe:

Machst Du etwas im debugger ausser n oder s?

Hast  das Script im Header -w  und verwendest Du use strict?

Claus

juedan

  • Gast
Re: Perl: Mail::IMAPClient macht Probleme beim Zugriff auf IMAPd
« Antwort #3 am: 06. Januar 2009, 09:14:38 »
Hallo claus,

danke für Deine Antwort.

Zitat
Machst Du etwas im debugger ausser n oder s?
Nein. Ich wollte die Stelle herausfinden, an der das Skript Probleme verursacht.

Zitat
Hast  das Script im Header -w  und verwendest Du use strict?
Aha. Guter Vorschlag. Werde ich ausprobieren. Ich hatte die Option -w gesetzt, aber keinerlei Warnungen erhalten. In Kombination mit use strict hatte ich es nicht probiert.

Viele Grüße

JueDan

juedan

  • Gast
[Solved] Perl: Mail::IMAPClient macht Probleme beim Zugriff auf IMAPd
« Antwort #4 am: 07. Januar 2009, 13:43:42 »
Hallo Forum,

nachdem ich die Ratschläge meines Vorposters umgesetzt hatte und es immer noch nicht funktionierte, habe ich auch die Zeritfikate erneuert. Auch dies brachte keinen Erfolg.

Nachdem ich beim Aufruf des Construktors die folgende Änderung vorgenommen hatte, funktioniert es problemlos. Ich muß nur noch herausfinden warum dem so ist.

Vor der Änderung:
# Initialisiere Objekt IMAPClient zur Spam-Verarbeitung
# ----------------------------------------------------------
my $imap = Mail::IMAPClient->new(
  User => $user,
  Password => $user_pw,
  Socket => $ssl, # <----
  Timeout => 10,
  Debug => $debugflag);

Nach der Änderung:
# Initialisiere Objekt IMAPClient zur Spam-Verarbeitung
# ----------------------------------------------------------
my $imap = Mail::IMAPClient->new(
  User => $user,
  Password => $user_pw,
  RawSocket => $ssl, # <----
  Timeout => 10,
  Debug => $debugflag);

In sämtlichen Tutorials zum Thema stand es so beschrieben, wie ich es bei "vor der Änderung" dokumentiert habe. Ich vermute einen Bug in IO::Socket::SSL und/oder Mail::IMAPClient.

Viele Grüße

JueDan
« Letzte Änderung: 07. Januar 2009, 14:50:17 von juedan »

Offline Ten Little Indyans

  • Sobl Bachelor
  • ***
  • Beiträge: 218
Re: Perl: Mail::IMAPClient macht Probleme beim Zugriff auf IMAPd
« Antwort #5 am: 07. Januar 2009, 16:28:27 »
Welche Version von Mail::IMAPClient hast Du denn?

In der Doku zur aktuellen Version 3.12 steht folgendes über Socket vs. RawSocket:

Zitat
PLEASE NOTE As of version 2.99_04 of this module, the Socket parameter has changed semantics to make it more "DWIM". The RawSocket parameter was introduced as a replacement for the Socket parameter in older version.

Es sieht also so aus als ob Du eine Version größer 2.99_04 hast aber Deine Tutorials eine ältere beschreiben.

juedan

  • Gast
Re: Perl: Mail::IMAPClient macht Probleme beim Zugriff auf IMAPd
« Antwort #6 am: 07. Januar 2009, 19:21:16 »
Danke für den Hinweis.

Ja ich verwende die Verison 3.12 des Moduls. Ich habe im großen weiten Internet in einer Mailingliste oder Forum - ich weiß nicht mehr wo - zum Thema gelesen, daß man eben im Constructor das Attribut Socket für einen SSL-Socket nehmen soll.

Aber gut, jetzt läuft es.

Danke für Eure Hilfe.

JueDan

claus

  • Gast
Re: Perl: Mail::IMAPClient macht Probleme beim Zugriff auf IMAPd
« Antwort #7 am: 08. Januar 2009, 19:27:11 »
Ok, das erklärt aber nicht, warum es im Debugger funktioniert und ausserhalb nicht?

Claus

juedan

  • Gast
Re: Perl: Mail::IMAPClient macht Probleme beim Zugriff auf IMAPd
« Antwort #8 am: 08. Januar 2009, 19:31:43 »
Im nächsten Urlaub werde ich mal einen Tag dafür hernehmen.
Falls Interesse am Skript besteht, kann ich es ja mal posten.

Viele Grüße

JueDan