I'm again embarrassed by these simple questions:
I'm catching what I think is spam, extracting a few headers of the spam and
appending them to a summary file for review, and then once a day emailing
myself this summary of the day's spam. The alleged spam gets gzipped for
later review, if desired.
I have a few questions. Basically, I get confused on how to properly do
things in procmail that aren't actually dealing with the message.
1) I have a file that keeps track of the number of spams (an ID number that
I will use to extract a spam at a later date if desired). I need to
increment it each time.
# Unset spam message counter
MESSAGENUM
# lock here
:0:spamcount.lock
{
:0i
* ? test -f $PMDIR/spamcount
{ MESSAGENUM=`cat $PMDIR/spamcount` }
# reset to zero if not set
MESSAGENUM=${MESSAGENUM:-0}
# is this the best method to increment,
# or would procmail scoring be better?
MESSAGENUM=`expr $MESSAGENUM + 1`
# write the incremented count back out
# Is this DUMMY method a good way to execute commands?
DUMMY= `echo $MESSAGENUM > $PMDIR/spamcount`
}
So is that a good way to increment, or would a scoring recipe be better?
:0
* $MESSAGENUM^0
* 1^0
{ }
MESSAGENUM = $=
2) This is where I get confused. I want to append some extracted headers
from the current mail to a file. I don't want to alter the current mail.
Is it better to use the DUMMY method as:
DUMMY=`echo Message Subject: $SUBJECT >> summary.spam`
DUMMY=`echo Date: $DATE >> summary.spam`
...
What bothers me is doesn't procmail provide the current mail to STDIN of
the external command? Is it better to do something like
:0ic
| (echo "Message Subject: $SUBJECT; \
echo " Date: $DATE; \
echo " MsgID: $MESSAGEID; \
echo "Rejected Reason: $REJECT_REASON; \
echo " ") >> summary.spam
3) How do I compare two variables? Now this is embarrassing and clunky:
I want to mail my spam summary at the start of each day. When I get my
first message of the day I see if the current date is the same as I have
recorded in a file. (Easier way? is there a simple way to just look at
the actual summary.spam file date and then mail it if it isn't today's date.)
TODAY=`date '+%m%y%d'`
# Unset $CURRENT
CURRENT
# Read current date from the file, and compare with TODAY
:0i
* ? test -f $PMDIR/currentdate.spam
{
CURRENT=`cat $PMDIR/currentdate.spam`
# lock so we don't try to mail the message more than once
:0:current.lock
* ! $ CURRENT ?? $TODAY
{
# update the current date as today
DUMMY=`echo $CURRENT > $PMDIR/currentdate.spam
# now send yesterday's spam summary
:0
* ? test -f $PMDIR/summary.spam
{
DUMMY=`cat $PMDIR/summary.spam | mail moseley`
DUMMY=`rm %PMDIR/summary.spam`
}
}
}
My questions:
- Is that the proper place for a lockfile?
- How should I compare the current date with the date in the file.
Would it be better to grep TODAY against currentdate.spam?
- What's the best way to mail a file to myself? Do I need to WAIT for
the mail command to finish before removing the file?
- Is * ! $ CURRENT ?? $TODAY the correct syntax? Do I need the first "$"
expand $TODAY?
Thanks ever so much.
Bill Moseley
mailto:moseley(_at_)netcom(_dot_)com