The exim project website has some good examples http://www.exim.org/exim-html-current/doc/html/spec_html/filter_ch-exim_filter_files.html.
We also have example .public.forward files in the following section.
NathanKennedy
It is possible to set up custom filters to do fancy things based on the X-Spam-Level: header. Here is NathanKennedy's ~/.public/.forward file. He finds that the default setting of 5.0 is too wimpy, and lets too much spam into his inbox. Virtually no ham that he gets scores less than 3.0, whereas a lot of spam scores less than 5.0, so he'd rather have anything over 3.0 go to his Junk folder. At the same time, he doesn't want to waste time, cycles, disk space or bandwidth with spam over 9.0. Most of his spam does score 9.0, and this goes straight to /dev/null (immediately disposed of) with this filter.
Finally, he has all HCoop list email go into a special HCoop folder.
Without further ado:
# Exim filter
logfile $home/.logs/mail/spamlog
if $header_subject contains "[HCoop"
then
save $home/Maildir/.HCoop/
finish
endif
if
"${if def:h_X-Spam-Level {def}{undef}}" is "def"
then
if $h_X-Spam-Level: begins "\*\*\*\*\*\*\*\*\*"
then save "/dev/null" 660
else
if $h_X-Spam-Level: begins "\*\*\*"
then save $home/Maildir/.Junk/
endif
endif
finish
endif
if
"${if def:h_X-Spam-Flag {def}{undef}}" is "def"
then
save $home/Maildir/.Junk/
finish
endif
FrankBynum
# Exim filter
# Lists
if $h_to: contains "lists.hcoop.net"
then save $home/Maildir/.Causes.Hcoop/
elif $h_to: contains "groups.barackobama.com"
then save $home/Maildir/.Causes.Obama/
elif $h_X-Generated-By: CONTAINS "Launchpad"
then save $home/Maildir/.Causes.Floss/
# Junk
elif $h_X-Spam-Level: begins "\*\*\*\*\*\*\*\*\*"
then save "/dev/null" 660
elif $h_X-Spam-Level: begins "\*\*\*\*"
then save $home/Maildir/.Junk.Spam/
elif $h_X-Spam-Status: contains "BAYES_99"
then save $home/Maildir/.Junk.Bayes_99/
endif
StephenMichel
This template filters anything sent to me@example.com or to me+$anything@example.com into the sub-folder me. This is useful if you have one or more aliases set up, to filter mail for each alias into its own subfolder.
if "$h_to:, $h_cc:, $h_bcc:" matches "me(\\\\+[\\^@]\\*)\\?@example\\\\.com"
then save $home/Maildir/.me/
endif
Björn Lindström
Some rules using matches which allows PCRE style regular expressions.
# Exim filter
# Log
logfile $home/.logs/mail/exim.log
# Don't do any filtering on delivery failure messages from Exim.
if error_message then finish endif
# Spam
if "${if def:h_X-Spam-Level {def}{undef}}" is "def" then
# Drops mail with a spam level above 9
if $h_X-Spam-Level: matches "^\\\\*{9}" then
seen
finish
# Puts other mail with a spam level above 3 into "Spam"
elif $h_X-Spam-Level: matches "^\\\\*{3}" then
save $home/Maildir/.Spam/
finish
endif
elif "${if def:h_X-Spam-Flag {def}{undef}}" is "def" then
# Puts other mail with spam flag set into "Spam" also.
save $home/Maildir/.Spam/
finish
endif
# Filter into folders
if "$h_to:, $h_cc:, $h_bcc:" matches "\\\\b((bkhl|upp?sala|relax)@fandom\\\\.se|upp?salafandom@dang\\\\.se|fanac@lists\\\\.lysator\\\\.liu\\\\.se)\\\\b" then
save $home/Maildir/.Fandom/
elif "$h_to:, $h_cc:, $h_bcc:" matches "@(\\.*\\\\.)?hcoop\\\\.net\\\\b" then
save $home/Maildir/.HCoop/
endif
Filtering out bogus bounce messages
AdamChlipala found a trick a while back that allows you to filter out bogus bounce messages. https://lists.hcoop.net/pipermail/hcoop-discuss/2007-January/000745.html