I remember, that I also struggled for quite a while until I figured it out. Here is what I used on my FreeBSD Dovecot installation ...

Remember, that the following code is working on "dovecot --version 1.2.12" ... but it could also be valid for later versions. I simply havn't checked it out yet.

  ### Dovecot AntiSpam ###
   # mail signature (used with any backend requiring a signature)
   #antispam_signature = X-Spam-Status
   #antispam_signature_missing = move

   antispam_mail_sendmail = /usr/local/etc/dovecot/sa-learn-helper.sh
   antispam_mail_sendmail_args = --username=%Lu
   antispam_mail_spam = --spam
   antispam_mail_notspam = --ham
   antispam_mail_tmpdir = /tmp
   antispam_spam = Spam
   #antispam_unsure = Virus
   antispam_trash = Trash


echo '#!/usr/local/bin/bash

#/usr/local/bin/sa-learn ${1} ${2} ${3} ${4} &> /var/log/DoveDamnAntiSpam.log
/usr/local/bin/sa-learn "${1}" "${2}" "${3}" "${4}"
exit 0

' > /usr/local/etc/dovecot/sa-learn-helper.sh
chmod 0777 /usr/local/etc/dovecot/sa-learn-helper.sh ;
chown root:wheel /usr/local/etc/dovecot/sa-learn-helper.sh ;


Best regards
Leander



Am 15.07.14 15:00, schrieb Mohammad S. Babaei:


Hi there,

I've already asked this question on FreeBSD forums without getting any
response. So, I thought it's a good idea to ask it again here.

I've setup Dovecote2 (2.2.13) + Postfix + SpamAssassin on my FreeBSD 10
VPS and it works flawlessly. Though, I couldn't setup the Dovecot
Antispam plugin to train SpamAssassin when I move mails to the Junk
folder.

I installed the plugin from FreeBSD ports and followed the official
documentation [1] and the man page [2] without any success.

This is my configuration:

########

# 2.2.13: /usr/local/etc/dovecot/dovecot.conf
# OS: FreeBSD 10.0-RELEASE-p6 i386 ufs
auth_mechanisms = plain login digest-md5
disable_plaintext_auth = no
first_valid_gid = 6
first_valid_uid = 26
last_valid_gid = 6
last_valid_uid = 26
lmtp_save_to_detail_mailbox = yes
mail_gid = mail
mail_location = mdbox:/mail/%d/%u
mail_privileged_group = mail
mail_uid = mailnull
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope
encoded-character vacation subaddress comparator-i;ascii-numeric
relational regex imap4flags copy include variables body enotify
environment mailbox date ihave
namespace inbox {
  inbox = yes
  location =
  mailbox Archive {
  auto = no
  special_use = Archive
  }
  mailbox Drafts {
  auto = subscribe
  special_use = Drafts
  }
  mailbox Flagged {
  auto = no
  special_use = Flagged
  }
  mailbox Junk {
  auto = subscribe
  special_use = Junk
  }
  mailbox Sent {
  auto = subscribe
  special_use = Sent
  }
  mailbox Trash {
  auto = subscribe
  special_use = Trash
  }
  mailbox virtual/All {
  auto = no
  special_use = All
  }
  prefix =
  separator = /
}
passdb {
  args = /mail/%d/dovecot_passwd
  driver = passwd-file
}
plugin {
  antispam_backend = MAILTRAIN
  antispam_mail_notspam = --ham
  antispam_mail_sendmail = /mail/sa-learn-pipe.sh
  antispam_mail_spam = --spam
  antispam_spam = Junk
  antispam_trash = Trash
  quota_rule = *:storage=8GB
  sieve = /mail/%d/%u/dovecot.sieve
  sieve_dir = /mail/%d/%u
  sieve_global_dir = /mail/sieve
  sieve_global_path = /mail/sieve/globalfilter.sieve
}
protocols = imap pop3 lmtp sieve
service auth {
  unix_listener auth-client {
  group = mail
  mode = 0660
  user = postfix
  }
  unix_listener auth-master {
  group = mail
  mode = 0600
  user = mailnull
  }
  user = root
}
service imap-login {
  inet_listener imap {
  address = *
  port = 143
  }
  inet_listener imaps {
  address = *
  port = 993
  }
  process_limit = 32
  process_min_avail = 1
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
  group = postfix
  mode = 0660
  user = postfix
  }
}
service managesieve-login {
  inet_listener sieve {
  port = 4190
  }
  process_min_avail = 0
  service_count = 1
  vsz_limit = 64 M
}
service managesieve {
  process_limit = 1024
}
service pop3-login {
  inet_listener pop3 {
  address = *
  port = 110
  }
  inet_listener pop3s {
  address = *
  port = 995
  }
  process_limit = 32
  process_min_avail = 1
}
ssl_cert = </etc/ssl/dovecot/cert.pem
ssl_key = </etc/ssl/dovecot/key.pem
userdb {
  args = /mail/%d/dovecot_passwd
  driver = passwd-file
}
verbose_proctitle = yes
protocol lmtp {
  mail_plugins = " sieve"
  postmaster_address = [email protected]
  quota_full_tempfail = yes
}
protocol sieve {
  mail_max_userip_connections = 10
  managesieve_implementation_string = Dovecot Pigeonhole
  managesieve_logout_format = bytes=%i/%o
  managesieve_max_line_length = 65536
}
protocol imap {
  imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
  mail_plugins = " quota imap_quota antispam"
}
protocol pop3 {
  mail_plugins = " quota"
  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
protocol lda {
  mail_plugins = " quota sieve"
  postmaster_address = [email protected]
  sendmail_path = /usr/local/sbin/sendmail
}

########

And, this is the script /mail/sa-learn-pipe.sh:

########

echo /usr/local/bin/sa-learn $* /tmp/sendmail-msg-$$.txt
echo "$$-start ($*)" >> /tmp/sa-learn-pipe.log

#echo $* > /tmp/sendmail-parms.txt
cat<&0 >> /tmp/sendmail-msg-$$.txt

/usr/local/bin/sa-learn $* /tmp/sendmail-msg-$$.txt

rm -f /tmp/sendmail-msg-$$.txt

echo "$$-end" >> /tmp/sa-learn-pipe.log

exit 0

########

I made it excecutable by all users using chmod a+x
/mail/sa-learn-pipe.sh

The problem is, there is no log in /var/log/maillog regarding the
Antispam plugin, and the script won't get called when I move any message
in/out to/from Junk folder.

I'll appreciate any help.

Reply via email to