#!/opt/bin/perl5 -w # require 5.001; # ########################################################################### # # # Program to scan the procmail(1) log file for new mail sorted by folders # # # ########################################################################### # # # Version 1.0 - Written 28.12.95 by Steffen Beyer # # # ########################################################################### # # # Copyright (C) 1995 by software design & management GmbH & Co. KG # # # ########################################################################### # # Some defaults: # $version = "version 1.0"; # $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 archive file: # $logfile = "$dir/.procmail.log.archive"; # unless ((-e $logfile) && (-f $logfile) && (-s $logfile)) { die "$self error: can't find '$logfile'!\n"; } # unless (open(LOGFILE, "<$logfile")) { die "$self error: can't open '$logfile': $!\n"; } # $state = 0; $from = ''; $subject = ''; $folder = ''; $select = 0; # $today = `date`; $today =~ /^\s*\w+\s+(\w+)\s+(\d+)\s+/; # $month = $1; $day = $2; $month =~ tr/a-z/A-Z/; # while () { chomp; if (/^From\s*(\S+)\s+\w+\s+(\w+)\s+(\d+)\s+/) { $from = $1; $mm = $2; $dd = $3; $mm =~ tr/a-z/A-Z/; $select = (($month eq $mm) && ($day == $dd)); if ($state != 0) { $item1 = &itemize(0); $item2 = &itemize($state); warn "$self warning: expecting keyword '$item2', found '$item1'!\n"; } $state = 1; $subject = ''; $folder = ''; } 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 ($select) { 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); # if (%mail) { 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}; } } else { print "Sorry. No new mail today.\n"; } # 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__