#!/usr/bin/perl -wT # Title : mbsize.pl # Function : show indiviual mailbox size # Author : Pascal Schiks (C) 2007 GNU/GPL # Config my $version="v1.1"; my $DEBUG=0; my $home="/home"; my $Maildir="Maildir"; my $warntext="Dear __USER__,\n" . "\n" . "You\'r mailbox is reaching maximum size !\n" . "Please remove some of your old mail to keep this place tidy\n" . "Thank you, the system administrator\n"; use strict; # Subroutines sub human { my ($size)=@_; my $MB=1048576; my $kB=1024; if($size>$MB) { $size=(int(($size*10)/$MB)/10)." MB"; } elsif($size>$kB) { $size=(int(($size*10)/$kB)/10)." kB"; } return $size; } sub createwarnmail { my ($INBOX) = @_; } sub scanmailcur { my ($mailcur) =@_; my $cnt=0; if($DEBUG) { print "$mailcur\n"; } if(opendir(MAILCUR,$mailcur)) { while(my $mailfile=readdir(MAILCUR)) { if( -f "$mailcur/$mailfile") { $cnt+=( -s "$mailcur/$mailfile" ); } } closedir(MAILCUR); } return $cnt; } sub scanmailfolder { my ($mailfolder)=@_; if($DEBUG) { print "$mailfolder\n"; } return scanmailcur("$mailfolder/cur"); } sub scanmaildir { my ($maildir)=@_; my $cnt=0; scanmailfolder($maildir); if(opendir(MAILDIR,$maildir)) { while(my $mailfolder=readdir(MAILDIR)) { if(($mailfolder ne "..") && ($mailfolder ne ".") && ($mailfolder=~m/^\..*/)&&( -d "$maildir/$mailfolder")) { $cnt+=scanmailfolder("$maildir/$mailfolder"); } } closedir(MAILDIR); } else { print "Error, Could not open $maildir\n"; } return $cnt; } # Start print "mbsize $version\n"; my $totalcnt=0; if(opendir(HOME,$home)) { while(my $userdir=readdir(HOME)) { my $maildir="/home/$userdir/$Maildir"; if( -d $maildir ) { my $cnt=scanmaildir($maildir); $totalcnt+=$cnt; # print "$maildir ".human($cnt)." \n"; printf("%-20s - %s\n",$userdir,human($cnt)); } } closedir(HOME); print "Total ".human($totalcnt)."\n"; } else { print "Error, Could not opendir $home\n"; }