[Perl] Mail::IMAPClient: fetch dauert ewig und scheitert oft
-
Hallo!
Ich beschäftige mich gerade mit dem Perl Modul Mail::IMAPClient und möchte ein paar Nachrichten von einem IMAP-Server anzeigen:
#!/usr/bin/perl -w use warnings; use strict; use Data::Dumper; use IO::Socket::SSL; use IO::Socket::INET; use lib "."; use IMAPClient; die "usage: $0 server user pass\n" unless @ARGV == 3; my ($server1, $user1, $pass1) = @ARGV; my $use_ssl = 1; sub start($$$) { my $server = shift; my $user = shift; my $pass = shift; my $socket; if($use_ssl) { $socket = new IO::Socket::SSL("$server:imaps") or die "connect failed"; } else { $socket = new IO::Socket::INET("$server:imap") or die "connect failed"; } my $imap = new Mail::IMAPClient(Socket => $socket, User => $user, Password => $pass) or die "login failed"; return $imap; } sub get_message_list($$) { my $imap = shift; my $box = shift; $imap->select($box); my $hash = {}; $hash = $imap->fetch_hash('BODY[HEADER.FIELDS (FROM)]'); $imap->fetch_hash('BODY[HEADER.FIELDS (DATE)]', $hash); $imap->fetch_hash('BODY[HEADER.FIELDS (SUBJECT)]', $hash); return $hash; } my $imap1 = start($server1, $user1, $pass1); my $list = get_message_list($imap1, "INBOX"); foreach my $key(keys %{$list}) { print $list->{$key}->{"BODY[HEADER.FIELDS (FROM)]"}, "\n"; print $list->{$key}->{"BODY[HEADER.FIELDS (DATE)]"}, "\n"; print $list->{$key}->{"BODY[HEADER.FIELDS (SUBJECT)]"}, "\n"; print "\n"; print ($imap1->message_string($key) or $@); print "\n"; } $imap1->logout();
Die Anzeige der Header geht wunderbar, aber wenn ich eine Nachricht herunterladen will dauert das teilweise sehr lange, obwohl die Nachrichten nur weniger KB groß sind. Außerdem scheitert es oft mit einem Timeout.
Weiß jemand, wo der Fehler liegt?
MfG
Fye
-
Gerade habe ich bemerkt, dass es ohne SSL wunderbar funktioniert. Der Fehler muss also irgendwo dort liegen.
Ohne SSL zu arbeiten ist für mich keine Option, da das Programm später einmal mit Googlemail arbeiten soll.