Hello

I have recently had to rebuild my email server, it is a small server for my various email accounts and I also host the email for a clients business.

Switched to Dovecot from Courier many years ago, and it has been a very reliable solution With the new rebuild I have updated it to Dovecot 2.2.33.2 with PigeonHole 4.21, it runs DSpam 3.10.2 to scan and tag all incoming mails as Spam or not then a Sieve rule to put the Spam emails into the Spam folder, I was also using the DSpam Antispam plugin to enable moving messages from one folder to another to teach failures to DSpam, this works well for my and my client.

Doing the rebuild I saw that the AntiSpam plugin had been deprecated and the preferred solution now was to use Sieve Filters, so I implemented that and had struggled with it for a few hours until I finally got it working.

It may be something about my setup but I am not sure it is, but the suggested way of doing it here https://wiki.dovecot.org/HowTo/AntispamWithSieve did not work for me and I don't think it was ever going to.

Here are the shell scripts and sieve filters that I came up with that work for me, your mileage may vary.

I use DSpam as a standalone binary not as a daemon so you may need to add the --client option on the dspam command line in the shell scripts if you run DSpam in daemon mode.

=== report-spam.sieve ===

require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];


if environment :matches "imap.user" "*" {
  set "userid" "${1}";
  if header :matches "X-DSPAM-Signature" "*"
  {
       set "signature" "${1}";
  }
}

pipe :copy "learn-spam.sh" [ "${userid}", "${signature}" ];

=== report-ham.sieve ===

require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];

if environment :matches "imap.mailbox" "*" {
  set "mailbox" "${1}";
}

if string "${mailbox}" "Trash" {
  stop;
}

if environment :matches "imap.user" "*" {
  set "userid" "${1}";
  if header :matches "X-DSPAM-Signature" "*"
  {
       set "signature" "${1}";
  }
}

pipe :copy "learn-ham.sh" [ "${userid}", "${signature}" ];

=== learn-spam.sh ===

#!/bin/sh
exec /usr/local/bin/dspam --user ${1} --signature=${2} --class=spam --source=error

=== learn-ham.sh ===

#!/bin/sh
exec /usr/local/bin/dspam --user ${1} --signature=${2} --class=innocent --source=error


I hope this saves someone some time or gives someone some tips

--
Regards

Colin

Reply via email to