#!/opt/bin/perl5 # # Needs perl 5.001 or higher! # ########################################################################### # # # Program to scan the procmail(1) log file for new mail sorted by folders # # # ########################################################################### # # # Version 1.0 - Written 15.09.95 by Steffen Beyer # # # ########################################################################### # # # Copyright (C) 1995 by software design & management GmbH & Co. KG # # # ########################################################################### # # Some defaults: # $version = "version 1.0"; # $self = $0; # if ($self =~ m!/([^/]+)$!) { $self = $1; } # # who am I? # ($name,$passwd,$uid,$gid,$quota,$comment,$gcos,$dir,$shell) = getpwuid($<); # $mainfolder = "mail/$name"; # pattern! # $domain = "sdm.de|en.muc.de"; # pattern! # $logfile = "/u/$name/.procmail.log"; # $backup = "old"; # $backupfile = "$logfile.$backup"; # unless ((-e $logfile) && (-s $logfile)) { print "Sorry. No new mail.\n"; exit; } # if (-e $backupfile) { $backup = '000'; $backupfile = "$logfile.$backup"; } # while (-e $backupfile) { $backup++; $backupfile = "$logfile.$backup"; } # unless (rename($logfile, $backupfile)) { die "$self error: can't rename '$logfile' to '$backupfile': $!\n"; } # system("touch '$logfile'"); chmod(0600, $logfile); # unless (open(LOGFILE, "<$backupfile")) { die "$self error: can't open '$backupfile': $!\n"; } # $state = 0; $from = ''; $subject = ''; $folder = ''; # while () { chomp; if (/^From\s*(\S+)/) { $from = $1; if ($state != 0) { $item1 = &itemize(0); $item2 = &itemize($state); warn "$self warning: expecting keyword '$item2', found '$item1'!\n"; } $state = 1; } elsif (/^\s*Subject:\s*(.*?)\s*$/) { $subject = $1; if ($state != 1) { $item1 = &itemize(1); $item2 = &itemize($state); warn "$self warning: expecting keyword '$item2', found '$item1'!\n"; } $state = 2; } elsif (/^\s*Folder:\s*(\S+)/) { $folder = $1; if ($state != 2) { $item1 = &itemize(2); $item2 = &itemize($state); warn "$self warning: expecting keyword '$item2', found '$item1'!\n"; } if ($folder =~ m!${mainfolder}!o) { if ($from =~ m!${domain}$!o) { $from =~ s/\@.*$//; } $user{$from}++; # if ($subject) # { # $topic{$from} .= "\"$subject\"\n"; # } } else { if ($folder =~ m!/([^/]+)$!) { $folder = $1; } } $mail{$folder}++; $state = 0; $from = ''; $subject = ''; $folder = ''; } else { $item = &itemize($state); warn "$self warning: expecting keyword '$item', unable to parse this line:\n"; warn "$_\n"; } } # close(LOGFILE); # foreach $folder (sort keys(%mail)) { $plural = ''; if ($mail{$folder} != 1) { $plural = 's'; } if ($folder =~ m!${mainfolder}!o) { print "You have $mail{$folder} new mail$plural in your main folder.\n"; } else { print "You have $mail{$folder} new mail$plural in folder '$folder'.\n"; } } # foreach $from (sort keys(%user)) { $plural = ''; if ($user{$from} != 1) { $plural = 's'; } print "You have $user{$from} new mail$plural from '$from'.\n"; # print $topic{$from}; } # exit; # sub itemize { my $state = shift; my $item; if ($state == 0) { $item = 'From'; } elsif ($state == 1) { $item = 'Subject'; } elsif ($state == 2) { $item = 'Folder'; } else { $item = '(internal error)'; } return($item); } # __END__