On Tue, Aug 22, 2017 at 01:55:45PM +0300, Aki Tuomi wrote:


On 22.08.2017 13:37, Darac Marjal wrote:
Hello all,

Hopefully this is something fairly simple.

I've been trying to set up the Sieve Antispam system as detailed at
https://wiki2.dovecot.org/HowTo/AntispamWithSieve, but at the moment,
whenever I change mailboxes I get the following message logged:

  Aug 22 09:30:45 remy dovecot: imap(da...@darac.org.uk): Error:
imapsieve: mailbox INBOX: Failed to read /shared/imapsieve/script
mailbox attribute

and my script does not run when I move files between folders.

My sieve files are chmod'ed 0644 and the shell script used to pipe
into spamassassin is 0755, so it *should* work, shouldn't it? Is there
something I've missed?


Can you show doveconf -n and your sieve scripts?

Aki

Certainly:

---8<---  doveconf -n  ---8<---

# 2.2.31 (65cde28): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.19 (e5c7051)
# OS: Linux 4.9.0-1-686-pae i686 Debian buster/sid xfs
auth_mechanisms = digest-md5 cram-md5 plain
auth_verbose = yes
imap_id_log = *
info_log_path = /var/log/dovecot.info
lda_mailbox_autosubscribe = yes
log_timestamp = "%Y-%m-%d %H:%M:%S "
login_log_format_elements = service=%s user=<%u> session=%{session} method=%m 
rip=%r lip=%l mpid=%e %c %k
mail_access_groups = mail users
mail_gid = vmail
mail_home = /var/mail/%u
mail_location = mdbox:/var/mail/%u/Mail
mail_max_userip_connections = 50
mail_plugins = " zlib fts fts_lucene stats fts fts_lucene stats"
mail_privileged_group = mail
mail_uid = vmail
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 index ihave duplicate 
mime foreverypart extracttext imapsieve vnd.dovecot.imapsieve vnd.dovecot.pipe 
vnd.dovecot.execute
namespace {
 hidden = no
 ignore_on_failure = yes
 inbox = no
 list = children
 location = mbox:~/archive:INDEX=~/archive-indexes
 prefix = _ARCHIVE/
 subscriptions = no
}
namespace {
 hidden = no
 inbox = no
 list = yes
 location = mdbox:/var/mail/%u/Mail:MAILBOXDIR=expunged
 prefix = .EXPUNGED/
 subscriptions = no
}
namespace inbox {
 inbox = yes
location = mailbox Drafts {
   special_use = \Drafts
 }
 mailbox Junk {
   special_use = \Junk
 }
 mailbox Sent {
   special_use = \Sent
 }
 mailbox "Sent Messages" {
   special_use = \Sent
 }
 mailbox Trash {
   special_use = \Trash
 }
prefix = }
passdb {
 args = /etc/dovecot/passwd
 driver = passwd-file
}
plugin {
 antispam_backend = pipe
 antispam_crm_binary = /bin/false
 antispam_debug_target = syslog
 antispam_pipe_program = /usr/bin/sa-learn-pipe.sh
 antispam_pipe_program_notspam_arg = --ham
 antispam_pipe_program_spam_arg = --spam
 antispam_pipe_tmpdir = /tmp
 antispam_spam_pattern_ignorecase = SPAM
 antispam_trash_pattern_ignorecase = trash;Deleted *
 fts = lucene
 fts_lucene = whitespace_chars=@.
 imapsieve_mailbox1_before = file:/usr/lib/dovecot/sieve/learn-spam.sieve
 imapsieve_mailbox1_causes = COPY
 imapsieve_mailbox1_name = Spam
 imapsieve_mailbox2_before = file:/usr/lib/dovecot/sieve/learn-spam.sieve
 imapsieve_mailbox2_causes = COPY
 imapsieve_mailbox2_name = spam
 imapsieve_mailbox3_before = file:/usr/lib/dovecot/sieve/learn-ham.sieve
 imapsieve_mailbox3_causes = COPY
 imapsieve_mailbox3_from = Spam
 imapsieve_mailbox3_name = *
 imapsieve_mailbox4_before = file:/usr/lib/dovecot/sieve/learn-ham.sieve
 imapsieve_mailbox4_causes = COPY
 imapsieve_mailbox4_from = spam
 imapsieve_mailbox4_name = *
 imapsieve_url = sieve://mail.darac.org.uk
 lazy_expunge = .EXPUNGED/
 sieve = file:~/sieve;active=~/.dovecot.sieve
 sieve_execute_bin_dir = /usr/lib/dovecot/sieve
 sieve_extensions = +vnd.dovecot.pipe +vnd.dovecot.execute
 sieve_pipe_bin_dir = /usr/lib/dovecot/sieve
 sieve_plugins = sieve_imapsieve sieve_extprograms
 sieve_spamtest_max_header = X-Spam-Score: 
score=-?[[:digit:]]+\.[[:digit:]].*required=([[:digit:]]+\.[[:digit:]])
 sieve_spamtest_status_header = X-Spam-Score: 
score=(-?[[:digit:]]+\.[[:digit:]]).*
 sieve_spamtest_status_type = score
 stats_refresh = 30 secs
 stats_track_cmds = yes
 zlib_save = lz4
 zlib_save_level = 2
}
postmaster_address = postmas...@darac.org.uk
protocols = " imap lmtp sieve"
service auth {
 unix_listener /var/spool/postfix/private/auth {
   group = postfix
   mode = 0660
   user = postfix
 }
 unix_listener auth-userdb {
   group = vmail
   mode = 0777
   user = vmail
 }
}
service lmtp {
 inet_listener lmtp {
   address = 192.168.101.8
   port = 20024
 }
 unix_listener /var/spool/postfix/private/dovecot-lmtp {
   group = postfix
   mode = 0666
   user = postfix
 }
}
service managesieve-login {
 inet_listener sieve {
   port = 4190
 }
 inet_listener sieve_deprecated {
   port = 2000
 }
}
service stats {
 fifo_listener stats-mail {
   mode = 0600
   user = vmail
 }
}
ssl_cert = </var/lib/dehydrated/certs/mail.darac.org.uk/fullchain.pem
ssl_cipher_list = AES128+EECDH:AES128+EDH
ssl_client_ca_dir = /etc/ssl/certs
ssl_dh_parameters_length = 2048
ssl_key =  # hidden, use -P to show it
ssl_prefer_server_ciphers = yes
userdb {
 args = /etc/dovecot/passwd
 default_fields = uid=vmail gid=vmail home=/var/mail/%u
 driver = passwd-file
}
protocol lmtp {
 mail_fsync = optimized
 mail_plugins = " zlib fts fts_lucene stats sieve"
}
protocol lda {
 mail_fsync = optimized
 mail_plugins = " zlib fts fts_lucene stats sieve"
}
protocol imap {
 mail_plugins = " zlib fts fts_lucene stats zlib imap_zlib imap_stats imap_sieve 
stats imap_stats"
}

---8<---  learn-spam.sieve  ---8<---

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

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

pipe :copy "SA-Learn-Pipe" ["--spam", "${username}"];


---8<---  learn-ham.sieve  ---8<---

re ["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 "username" "${1}";
}

pipe :copy "SA-Learn-Pipe" ["--ham", "${username}"];


---8<---  SA-Learn-Pipe  ---8<---

#!/bin/bash

[ -x /usr/bin/sa-learn ] || exit 0

logger "Learning from message"
logger $(id)
logger "IMAP User = ${2}"

# sa-learn does now accept messages on stdin
# However, we still need this script to avoid putting sa-learn in the 
sieve-exec folder

exec /usr/bin/sa-learn -u ${2} ${1}


--
For more information, please reread.

Attachment: signature.asc
Description: PGP signature

Reply via email to