Re: IMAP accounts und Mailfolder size automatische ermitteln
Hallo Michelle!
Michelle Konzack schrieb am Samstag, den 15. März 2008:
> ich bin auf der suche nach einem Tool, welches die
> imaps://server/INBOX
> abfrägt und die Größe in kByte zurückliefert und nicht nur die Anzahl
> der messages...
>
> Kann mir jemand weiterhelfen?
Das geht mit awk theoretisch sogar auf der Konsole:
,----[ ~$ cat ~/telnet_imap.txt ]-
| 1 login benutzer password
| 2 select INBOX
| 3 fetch 1:* (RFC822.SIZE)
| 4 logout
`----
#v+
~$ cat telnet_imap.txt |nc localhost 143 |awk '/RFC822.SIZE/
{i+=substr($5,1,index($5, ")")-1);} END {printf "Size: %.2f
kB\n",i/1024;}'
Size: 25186,62 kB
#v-
Ungetestet und ich bin mir nicht sicher, ob die Ausgabe des IMAP Fetch
Befehls standardisiert ist, also ob die Ausgabe wirklich immer so
aussieht, oder ob sie bei anderen Servern auch etwas anders aussehen
kann.
Dann müßte evtl. noch der substr. Ausdruck angepasst werden.
Soll das ganze noch rekursiv über alle Folder laufen, sollte ein
kleines Perl-script helfen:
,----
| #!/usr/bin/perl
|
| use Net::IMAP::Simple;
| use strict;
|
| my $password="password";
| my $user="user";
| my $host="localhost";
| my $seperator=".";
|
| my $imap = Net::IMAP::Simple->new($host) || die
| $Net::IMAP::Simple::errstr."\n";
|
| unless($imap->login($user, $password)){
| die "Login failed: " . $imap->errstr() . "\n";
| }
| my @mb=$imap->mailboxes;
| my $size = 0;
|
| foreach (@mb){
| my $num = $imap->select($_);
| # Die Variante $imap->list funktioniert leider nicht,
| # also über alle Nachrichten loopen.
| for (my $i=1; $i <= $num; $i++){
| $size += $imap->list($i);
| }
| };
|
| printf "%.2f kB\n", $size/1024;
|
| $imap->quit;
`----
benötigt aber das Perl-Modul Net::IMAP::Simple. Das passende Paket ist
libnet-imap-simple-perl.
Dann könnte man das Ganze noch per Parameter steuerbar machen und die
Fehlerbehandlung verbessern, das sollte dann nicht mehr allzu
schwierig sein.
Grüße,
Christian
--
hundred-and-one symptoms of being an internet addict:
95. Only communication in your household is through email.
Reply to: