When you use MS Exchange as your Mailserver there is the problem that Exchange
removes some of the mail headers when re-sending an email (as attachment or as
an reply) or if a user puts the message into a public folder that is pulled via
IMAP for retraining (retrain-as-spam or retrain-as-innocent e.g.).
I use dspam with virtual-UIDs and I configured my exim sitting in front of
Exchange to circumvent this header-remove problem. Exim adds the dspam
signature to the Received: header and when this message is presented for
retraining the dspam signature is extracted from this Received: header and the
original X-DSPAM-Signature is reconstructed (btw in exim header variable names
are caseless, so $header_x-dspam-signature: is the same as
$header_X-DSPAM-Signature:):
Store signature in Received: header:
====================================
received_header_text = Received: \
${if def:sender_rcvhost {from $sender_rcvhost\n\t}\
{${if def:sender_ident \
{from ${quote_local_part:$sender_ident} }}\
${if def:sender_helo_name {(helo=$sender_helo_name)\n\t}}}}\
by $primary_hostname \
${if def:received_protocol {with $received_protocol}} \
${if def:tls_cipher {($tls_cipher)\n\t}}\
(MTA)\n\t\
id $message_exim_id\
${if def:header_x-dpam-signature: { (dssig $header_x-dspam-signature:)}}\
${if def:received_for {\n\tfor $received_for}}
Result looks like this
======================
Received: from dspam by nospam.sdm.de with dspam-scanned (MTA)
id 1IKYNF-00019x-DH (dssig 42345,46c0448944501530714789)
for [EMAIL PROTECTED]; Mon, 13 Aug 2007 13:46:17 +0200
Retreive signature and reconstruct when delivering locally:
===========================================================
# alias Router
system_aliases:
driver = redirect
domains = +local_domains
allow_fail
allow_defer
data = ${lookup{$local_part}dbm{/var/db/aliases.db}}
# user = exim
file_transport = address_file
pipe_transport = address_pipe
# get the dspam signature that is saved in the Received: header lines and
place
# it as a normal header so that dspam can read and interpret it correctly0
headers_add = ${if and{\
{match {$header_Received:}{dssig ([^)]*)}}\
{!def:header_x-dspam-signature:}\
}\
{X-DSPAM-Signature: $1}{}\
}
# localuser Router
localuser:
driver = accept
domains = +local_domains
check_local_user
transport = local_delivery
# get the dspam signature that is saved in the Received: header lines and
place
# it as a normal header so that dspam can read and interpret it correctly
headers_add = ${if and{\
{match {$header_Received:}{dssig ([^)]*)}}\
{!def:header_x-dspam-signature:}\
}\
{X-DSPAM-Signature: $1}{}\
}
Additional information:
=======================
I use fetchmail (very nice) to fetch messages out of a public folder from
Exchange for retraining. My .fetchmailrc looks like this:
set no bouncemail
set syslog
set invisible
set no spambounce
set properties ""
poll mda.foo.com
proto imap
user '<your-user>'
password '<your-user-password>'
batchlimit 100
folder "Public Folders/Antispam/Retrain-As-Spam"
fetchall
no rewrite
mda "/bin/exim -i -oem -f [EMAIL PROTECTED] [EMAIL PROTECTED]"
poll mda.foo.com
proto imap
user '<your-user>'
password '<your-user-password>'
batchlimit 100
folder "Public Folders/Antispam/Retrain-As-Innocent"
fetchall
no rewrite
mda "/bin/exim -i -oem -f [EMAIL PROTECTED] [EMAIL PROTECTED]"
#################
A simple crontab entry will retrain you token base. My alias file looks like
this:
# aliases
spam-retrain: "|/bin/dspam --user [EMAIL PROTECTED] --class=spam --source=error"
ham-retrain: "|/bin/dspam --user [EMAIL PROTECTED] --class=innocent
--source=error"
Dspam will retreive the correct signature from the message to retrain the token
base.
It is better to use "mda" than "smtpname [EMAIL PROTECTED]" because "mda"
rewrites the sender address to a local one ([EMAIL PROTECTED]) so the original
sender of the message will not get a DSN in case of a delivery error what would
be awkward.
Best regards
Joerg Pichel
sd&m - 25 years expertice in software engineering
--
Joerg Pichel [EMAIL PROTECTED]
sd&m AG http://www.sdm.de/
software design & management
Carl-Wery-Str. 42, 81739 Muenchen,
Germany Tel +49 89 63812-112, Fax -555
Management board: Edmund Küpper (chairman), Burkhard Kehrbusch,
Rüdiger Azone, Dr. Uwe Dumslaff, Kai Grambow, Dr. Michael Rading
Chairman of the board of directors: Pierre Hessler
Location and county court: München HRB 126057