How does ZFilter compare to other filter programs?

I only know of three other programs that try to filter mail, so I'm sorry if I don't compare it to your favorite one. Perhaps you can compare it yourself and tell me what you think? I'd love to know... my eMail address is at the top and bottom of this README.

The other progams I know of are: "filter", "mailagent" and "procmail". Here's how I think I stack up against them:

filter: ZFilter was intended to replace filter. I hated that program. :) The old filter was clunky, and had an atrocious man page. ZFilter's action set is a superset of the old filter's. Any thing the old filter could do, ZFilter can do, and probably better. ZFilter is written in PERL and is more customizable than filter, which is written in C. ZFilter can take as many actions as you like to any expression. Filter would let you take one.

procmail: Procmail places more emphasis on reliability and delivering mail under miserable conditions. ZFilter works best when the operating system isn't overloaded, the file system has enough space to hold incoming mail, etc.. ZFilter is heading in the direction of better reliability, but for the moment, new features are a higher priority than delivering mail under very adverse conditions. ZFilter offers many more actions, and abilities.

mailagent: NOTE: This comparison was written in 1997, and I haven't checked it against the current version of Mailagent.

I like mailagent. If I had known about mailagent when I first tried to find a better filter, I might never have written ZFilter. ZFilter differs in several ways. First, the rules file for Mailagent follows a lex style, ZFilter's is more like a shorthand C style that should be easily grokked by C and PASCAL programmers. It also accepts old BASIC style rules. I hope this makes ZFilter easy to use for beginners and people unfamiliar to programming and the UNIX environment.

Mailagent comes with a separate configuration program. ZFilter's config mode is internal.

Mailagent can run as a daemon process and work on an existing mail queue and mail folders. ZFilter only deals with mail as it comes in.

Both are written in perl, although mailagent comes with C source. ZFilter is tiny. Mailagent's package is nearly 500k gzipped and has over 20 directories. ZFilter takes up about 30k gzipped and contains only two files.

Both programs probably have much different styles of displaying summaries, but I've never seen mailagent's, so I don't know what the differences are specifically.

Mailagent doesn't have commands for adding/removing people from lists per se, but has a server to process message bodies for commands. ZFilter can search message bodies for whatever you like, but is much clunkier than Mailagent about it.
Mailagent doesn't have commands for dealing with counters and permanent variables.

There are numerous subtle differences and minor features in both programs that are not supported in the other. I haven't made a serious effort to catalog these, but they will become apparent over time to anyone who switches. If there is a feature of any other program that you especially like and would like to see in ZFilter, please eMail me and I'll see what I can do.

Here is a short Mailagent <-> Zfilter command set showing what command equivalents are. ZFilter does not go into different "states" during message processing, nor does it act as a daemon process, so some of Mailagent's commands are not applicable to ZFilter. They are marked with n/a and a comment is made for them.

There are often command aliases/synonyms to let you use Mailagent commands in ZFilter if you came from that background. They are in parentheses under the command name.
Items marked with a "*" are not directly supported.
ZFilter and Mailagent treat the output of commands differently. Mailagent mails it to the owner of the program, ZFilter stores it in a variable called "result" and it is lost unless you explicitly do something with it.

*addlist Add to list. Can be emulated in
Mailagent by server commands in
the message body if present.
annotateaddheader(or annotate)
afterat/non-relativeRuns a command after a certain
time. (non-relative only)
*after ZFilter's after command runs
another command either immediately
or after a specified time.
backrun + takeRuns a program & takes actions
based on it's output
beeppage (as an argument; also annoy, or biff)
beginn/a Enters a new state
biffpage (or annoy, or biff)
feedxmessage(or feed)
*maillistsee "addlist"
macro* Lets you create a macro
nop(leave empty)No-operation. To not take
actions to an "if" statement,
simply do not put any after it.
(or nop)
once(default)Only take the command once
passxcontent(or pass)
processn/a Process and execute Mailagent
protectmode (or protect)
purifyxheader (or purify)
*remlist See "addlist"
queuen/a Re-Queue the message to process
recordn/a Record message, switch to SEEN
mode if it has been recorded before.
reject* Abort the current action and
reset to default action.
requireload (or get, or require)
restart* Restart rule file
runexecute (or run)
selectduring (or select)
servern/a Treat message body as server
split* Split up the message into several
umaskumask Changes process's umask
uniqueunique (and the var. "unique" as a shortcut)
vacationset,cannedTurns vacation mode on and off
(when on, tells people who write
to you that you're on vaction)

Go back to my Home Page
Go back to Table of Contents
Send me e-mail!