Filtering email with filter(1)
Some time ago I was browsing through list of orphaned Debian packages^1. and encountered `filter` program with very promising description — "filter is one of the original mail filtering programs written for UNIX".
It is much simplier than `procmail`, its manual page is *page*, not *manual*, while supporting almost anything I need:
- regex/substring matching of *Subject*, *To* and *From* headers
- built-in delivery into mboxes and any other develiery method via piping. It is important to me, since I use mmh^2 mail user agent, which uses its own mail storage format.
- support of filtering, based on length of message body. Not sure how well it copes with damned "content/alternative" messages.
Syntax of `filter` rules is much less cryptic and less verbose, than one of `procmail`. Compare
if (subject = "Foo") then save "/tmp/foo.mbox"
with much more verbose `procmail` rule.
Unfortunately, `filter` does not provide equivalence of two features of `procmail`, that are significant to my email workflow:
- Matching of arbitrary header. My email provider run SpamAssassin on
incoming emails and adds *X-Spam-Level* header. My `procmail` configuration uses this header to classify messages as spam. Probably, I could run SpamAssassin locally, but why bother, if settings of my email provider are fine for me.
- Handling of duplicate email. In cases when people reply to me and add mailing list into carbon copy, I receive two copies of email with same `Message-Id` header. It is distracting.
Both `filter` and `procmail` are long ~dead~ mature. Source code of `filter` is twice as short, if you care about such things. Half of that is regular expression engine, that is built it modern implementations of standard C library. Give `filter` a shot.
Definitely, `filter` would benefit from some care. Use standard regular expression engine, add support for *X-Spam-Level* header and here it is -- perfect email filtering solution. Maybe, one day, in my copious free time…