FILTER(1) General Commands Manual FILTER(1)
NAME
filter - filter incoming messages before adding to mailbox
SYNOPSIS
filter [-q] [-v] [-l] [-o output] [-f rules-file] [-m mailbox]
filter [-n] [-f rules-file]
filter [-r] [-o output] [-f rules-file]
filter [-c] [-s] [-o output] [-f rules-file]
filter [-c] [-S] [-o output] [-f rules-file]
DESCRIPTION
In brief, filter is designed to sort incoming mail based on user preferences for various recognized headers. It logs a summary of messages
filtered to a logfile. See the USAGE section for full details.
OPTIONS
The flags the filter program understands are;
-c Clear logs. If this flag is used, the log files will be removed after being summarized by either "-s" or "-S" (see below).
-f rules-file
Get rules from specified file instead of default $HOME/.filter/filter-rules
-l Log actions only. Do not log information about mailed messages.
-n Not really. Output what would happen if given message from standard input, but don't actually do anything with it.
-o file Redirect stdout messages to the specified file or device. Logging of filter actions is not affected. (This is added to more
gracefully deal with changes in the file system (since sendmail is quite picky about modes of files being redirected into.))
-m mailbox
Override the compiled in definition of your primary 'mailbox'. This is disabled if filter is setgid.
-q Quiet. Do not log filtering actions.
-r Rules. List the rules currently being used.
-s Summarize. List a summary of the message filtering log.
-S This is the same as `-s' but includes message-by-message information additionally.
-v Verbose. Give output on standard out for each message filtered. May be useful to set output to ``/dev/console'' or other log-
ging device. (see -o).
USAGE
Filter uses a set of selection rules to process incoming mail messages. These rules are normally read in from $HOME/.filter/filter-rules.
As soon as a rule matches something about the message, that rule is used, and no further action is taken. The general format for a rule
is;
if (expression) then action
where expression is:
expression ::= { not } condition { and expression }
condition ::= field = stringvalue
::= field != stringvalue
::= lines relop numvalue
or ::= always
These further break down as:
field ::= from | subject | alphasubject | to | lines | sender
relop ::= = | != | < | > | <= | >=
stringvalue ::= any quoted string
numvalue ::= any integer value
Note: alphasubject is a transformed version of the subject line, where only alpha chars are preserved, and they are forced to lower case.
It is then simpler to use a regular expression match across a wide variety of similar subjects.
from matches any and all of the following headers:
"From " From: Reply-To: Sender:
Action can be any of:
delete (ignore this message; throw it away)
save foldername (put in 'foldername' for later)
savecopy foldername (save a copy AND put in my inbox)
execute command (pipe message to 'command')
executec command (copy to inbox, AND pipe to 'command')
forward address (forward this message)
forwardc address (forward this message, AND copy to inbox)
resend address (resend to new addr without change)
leave (just put it in my inbox)
bounce (say there's no such user)
An example of a rules file would be:
# I'll read this stuff later when I feel like it
if (from = "list@interest.org") then save "~/Mail/mailinglist"
# This mailing list actually has an x-mailing-list header
if (mailinglist = "smartlist@other.com") then save "~/Mail/otherlist"
# auto-archive this project's email, AND put in my current mailbox
if (subject = "strange project") then savecopy "~/Mail/proj-archive"
# If "make money" appears ANYWHERE in subject, upper/lowercase,
# delete the lousy spam
if ( subject = "make money" ) then delete
# This person no longer shares this virtual mailbox with me.
# Resend visibly as a "forwarded" message.
if (to = "partner") then forward "partner@new.address.com"
# If email for an old address comes to me, resend to new one.
# Note that the "envelope" will show my address, but the
# normal headers will not
if ( to = "old_address" ) then resend new@address.here"
# Special virtual headerline derived from normal subject line
# catches "multiple!!!wor+ds**here"
if ( alphasubject = "multiplewordshere" ) then delete
# If email for a special address comes to me, resend through
# a non-standard "special" mailer
if ( to = "special_address" ) then exec "/usr/lib/mailer special@addr"
#
# The rules file doesnt really need parentheses. Or even the 'if'.
# They are just traditional.
subject = "silly" then bounce
Note that all filenames must be double-quoted
For further information about the rules language, please see The Elm Filter Guide.
MAINTAINER
Philip Brown
FILES
$HOME/.filter/filter-rules Default rules file
$HOME/.filter/filterlog A log of what has been done
$HOME/.filter/filtersum A summary of what has been done
$MAIL IF you set this var, defines your
default mailbox
/etc/passwd Used to get users home directory
SEE ALSO
The Elm Filter Guide (distributed with the source code)
mail(1), mailx(1), sendmail(1,8)
COMMENTS
Could be smarter about pattern matching. Message body checks might be nice too.
Please note that this was historically bundled with the elm mail reader, but now can be found at
http://www.bolthole.com/filter/
BUG REPORTS TO
filter@bolthole.com
COPYRIGHTS
Copyright 1988-1992 by The USENET Community Trust
Derived from Elm 2.0, Copyright 1986, 1987 by Dave Taylor
USENET Comm. Trust 19 April 2004 FILTER(1)