I used to classify spam mail with procmail, but procmail is excuted only for local users. So  when you use the .forward file, spam mail is also forwarded to the other email addresses.
It’s not so quite import but I don’t like this behavior. so I change the exim configuration to run bogofilter with the transport/router of exim.
first let’s configure transport like this.
bogofilter:
  driver = pipe
  command = /usr/sbin/exim -oMr bogodone -bS
  use_bsmtp = true
  transport_filter = /usr/bin/bogofilter -d /etc/bogofilter/ -e -p
  log_output = true
  return_path_add = false
  temp_errors = *
  home_directory = "/tmp"
  current_directory = "/tmp"
  message_prefix = ""
  message_suffix = ""
after that you need to declare the router which uses this transport. Order is important in router. I put it right after the system_alias router.
bogofilter:
  domains = +local_domains
  no_verify
  condition = ${if !eq {$received_protocol}{bogodone} {1}{0}}
  driver = accept
  transport = bogofilter
With this configuration, bogofilter will be excuted but it put only an additional header like “X-bogofilter: …” so we need another transport/router to classify the spam mails.
Here’s the transport to do that.
spam_delivery:
  driver = appendfile
  directory = /home/$local_part/.maildir/.Spam
  maildir_format
  delivery_date_add
  envelope_to_add
  return_path_add
With this transport, we can put the spam mails to the .Spam folder within $HOME/.maildir. If you use the IMAP protocol, then you can simply check the spam mails by accessing Spam folder. But with POP3 protocol there’s no way to check it. So if you use POP3 then use the header filtering rules of client software instead.
And we also need to add a router which uses this transport. The order is important in here too. I put it below the bogofilter router.
removingspam:
  driver = accept
  check_local_user
  condition = ${if match {$h_X-Bogosity:} {Spam, tests=bogofilter} {1}{0}}
  transport = spam_delivery
Spam mail has the header, X-Bogosity: Spam, test=bogofilter …, so we can classify the spam mail easily.
To confirm it working, check the mail log. I checked /var/log/mail/current because I use metalog but in almosts linux distributions syslogd is included so check the /var/log/messages file.
$ # tail -f /var/log/mail/current |grep R=
Feb 26 16:48:31 [exim] 2008-02-26 16:48:31 1JRkT5-0001pz-Nx => mailaddr R=procmail T=procmail
Feb 26 16:48:35 [exim] 2008-02-26 16:48:35 1JTuY0-00081q-7u => mailaddr R=removingspam T=spam_delivery
Feb 26 16:48:44 [exim] 2008-02-26 16:48:44 1JQWAs-0002po-CR => mailaddr R=bogofilter T=bogofilter
Feb 26 16:48:45 [exim] 2008-02-26 16:48:45 1JTuY5-000826-EK => mailaddr R=removingspam T=spam_delivery
The name of router/transport is located after R= and T= . The name of router appears after R=, and the name of transport appears after T=. According to this log, we can say that removespam or procmail router is used after the bogofilter excuted.
