[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [Perl] Wie NEUE Nachrichten in IMAP ermitteln?



* Michelle Konzack (linux4michelle@tamay-dogan.net) [15.08.08 14:22]:
> Hello Perl-Programmierer,
> 
> bin gerade dabei ein kleines Tool zu schreiben bei dem  ich  von  ausge-
> wählten Mailfoldern die Anzahl der NUEN  und  ALLER  messages  ermittlen
> muß.
> 
> Ich verwende dazu Net::IMAP::Simple
> 
> Nun, gibt es eine bessere (und schnellere) Möglichkeit, als die folgende
> 
> 1)  $imap->select($MAILFOLDER)
> 2)  $imap->list()
>     gibt einen hash auf die messages zurück =>TOTAL messages
> 3)  $imap->seen($MESSAGE)
>     auf JEDER message => gelesene messages.
>     (warum gibt es das nicht als new()?)
> 
> und dann die $SEEN von den $TOTAL abziehen um die neuen zu bekommen.
> 
> Das problem ist dabei, das meine
> 
>     INBOX.ML_devel.linux-kernel@vger_kernel_org/
> 
> gut mal 20.000 messages durchschnittlich  hat,  bevor  sie  ins  Archive
> vergeschoben werden.  Dann noch das pollen von so um die 150  Mailfolder
> und ich versterbe an Altersschwäche...
> 
Also daran lässt sich nur was machen wenn Du 'mal 'ne ordentliche 
Archivierung durchführst, und die Ordner mit uralt mails einfach 
ignorierst.

> Hat jemand eine Idee, wie man das ganze schneller machen kann?
> 
Also bei dieser Masse hilft nur vorheriges sortieren mit was anderem.

> Eventuell auch andere Perl-Bibliothek?
> 
Also verausgesetzt Du verschiebst Deine zu archivierenden Mails vorher 
per imapfilter nach Archiv, ist diese Lösung recht schnell.


#!/usr/bin/perl

use strict;
use warnings;

use Mail::IMAPClient; 

my $host = "Deine_Providerin";
my $port = xxx;
my $id   = 'DeinLogin';
my $pass = "dein_passwort";

my $imap = Mail::IMAPClient->new(
                         Server         => $host,
                         Port           => $port,
                         User           => $id,
                         Password       => $pass,
#                        Debug          => 1,
                         Clear          => 5,   # Unnecessary since '5' is the default
                        ) or die "Cannot connect to $host as $id";

foreach my $folder ($imap->folders()) {
        if ($folder =~ m/Archiv*/) { next; };
        $imap->select($folder);
        my $unseen =$imap->unseen_count($folder);
        if ($unseen >0) {
                printf " %37s %4d/%4d\n", $folder, $unseen, $imap->message_count($folder);
        }
}

$imap->close();


HTH
Sebastian


-- 
 " Religion ist das Opium des Volkes. "      Karl Marx

 SEB@STI@N GÜNTHER         mailto:samson@guenther-roetgen.de

Attachment: pgpd5c7EOZ8SL.pgp
Description: PGP signature


Reply to: