#!/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.1.1 - Written 20.12.95 by Steffen Beyer # # # ########################################################################### # # # Copyright (C) 1995 by software design & management GmbH & Co. KG # # # ########################################################################### # # Some defaults: # $version = "version 1.1.1"; # $self = $0; $self =~ s!^.*/!!; # # Who is calling me? # ($name,$passwd,$uid,$gid,$quota,$comment,$gcos,$dir,$shell) = getpwuid($<); # # Define a pattern here which identifies your INCOMING mail folder: # (like "/var/spool/mail/$name") # $mainfolder = "mail/$name"; # # Define a pattern here which identifies mails from your LOCAL domain(s): # $domain = "sdm.de|en.muc.de"; # # Define here the name and absolute path of your procmail(1) log file: # $logfile = "$dir/.procmail.log"; # unless ((-e $logfile) && (-s $logfile)) { print "Sorry. No new mail.\n"; exit; } # unless (open(LOGFILE, "<$logfile")) { die "$self error: can't open '$logfile': $!\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+\d+)?\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__