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

Re: IMAP accounts und Mailfolder size automatische ermitteln



Hallo Michelle!

Michelle Konzack schrieb am Dienstag, den 25. März 2008:

> Hallo Christian,
> 
> Am 2008-03-18 09:07:41, schrieb Christian Brabandt:
> > Das geht mit awk theoretisch sogar auf der Konsole:
> 
> ...wenn man kein TLS/SSL verwenden muß.  :-/

stunnel?

> ich dachte, das würde mit dem LIST command funktionieren...

Nee, du willst ja Nachrichten Eigenschaften haben und keine Liste 
vorhandener Nachrichten.

[perl script mit Net::IMAP::Simple]
> Geht das auch mit TLS/SSL?

klar. Das ganze aufgebohrt:

,----
| 1  #!/usr/bin/perl
| 2  
| 3  use Net::IMAP::Simple::SSL;
| 4  use strict;
| 5  use Getopt::Long;
| 6  
| 7  sub usage{
| 8  	chomp(my $name=`basename $0`);
| 9  	print <<EOF;
| 10  Usage: $name [OPTION]
| 11  $name will calculates recursively the file space usage of 
| 12  all your mails on your imaps Server.
| 13  
| 14  Option:
| 15  -u --user=<username>       IMAP Server User
| 16  -p --pass=<password>       IMAP Server Password
| 17  -s --server                IMAP Server
| 18  --port                     IMAP Server Port
| 19  --recursive                recursively calculate size
| 20  -h --help
| 21  EOF
| 22  	 exit(1);
| 23   }
| 24  
| 25  #DEFAULTS:
| 26  my $password="";
| 27  my $user="";
| 28  my $host="";
| 29  my $port=993;
| 30  my $recursive=0;
| 31  my @mailbox=qw/
| 32  	INBOX
| 33    INBOX.spam
| 34  /;
| 35  
| 36  GetOptions('user=s' => \$user,
| 37             'pass=s' => \$password,
| 38             'help'  => sub {usage},
| 39             'server=s' => \$host,
| 40             'recursive' => \$recursive,
| 41             'port=i' => \$port);
| 42  
| 43  if ($host eq "" or $password eq "" or $user eq "" ) {usage}
| 44  
| 45  my $imap = Net::IMAP::Simple->new($host.":".$port) || 
| 46  	die $Net::IMAP::Simple::errstr."\n";
| 47  
| 48  unless($imap->login($user, $password)){
| 49  	die "Login failed: " . $imap->errstr() . "\n";
| 50  }
| 51  if ($recursive) { @mailbox=$imap->mailboxes }
| 52  my $size = 0;
| 53  
| 54  foreach(@mailbox){
| 55  	printf "Wähle Mailbox: $_ \n";
| 56  	my $num = $imap->select($_);
| 57  		for (my $i=1; $i <= $num; $i++){
| 58  			$size += $imap->list($i);
| 59  		}
| 60  };
| 61  
| 62  printf "%.2f kB\n", $size/1024;
| 63  
| 64  $imap->quit;
`----

> Das Zertifikat liegt bei mir im ~/.mutt/ Verzeichnis rum.

Keine Ahnung. Vermutlich kann man mit IO::Socket::SSL auch Zertifikate 
prüfen. Könnte sein, dass das bei Net::IMAP::Simple::SSL auch geht, 
das baut ja darauf auf. Zur Not muß man das von Hand machen. Aber wie 
das geht, das finde ich heute nicht mehr heraus ;)

> Könntest Du es mir bitte anpassen das ich es mit:
> 
>    perl-script --user=<user> --pass=<pass>
> 
> aufrufen kann und es die Ordner
> 
>     imaps://mx.freenet.de/INBOX
>     imaps://mx.freenet.de/INBOX.Spamverdacht
>     imaps://mx.freenet.de/INBOX.Virusverdacht
> 

Versteh ich nicht. Du willst nur diese 3 Folder? Trag ab Zeile 31 in 
jede Zeile einen Folder ein. Du willst alle Folder? Ruf das Script mit 
--recursive auf. Ansonsten kannst Du in Zeile 26 noch zusätzliche 
Defaultoptionen angeben, wenn dir die Kommandozeile zu langweilig ist.

> die "Kein Benutzer angegeben\n" unless $user = "";
> die "Kein Password angegeben\n" unless $pass = "";

Du suchst den Operator eq für Stringvergleiche.

Grüße
Christian
-- 
hundred-and-one symptoms of being an internet addict:
99. The hum of a cooling fan and the click of keys is comforting to you.


Reply to: