Op 22-8-2017 om 13:03 schreef Darac Marjal:
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(darac@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?
Looks like you didn't configure Dovecot for use of the IMAP METADATA extension. That is a prerequisite for providing IMAPSIEVE support to your users.
https://wiki.dovecot.org/ImapMetadata
The main missing configuration is the mail_attribute_dict setting.
The error message you got was very unhelpful. That is fixed now:
https://github.com/dovecot/pigeonhole/commit/dc20a45fae8c5e402d1493847c38d72...
Regards,
Stephan.
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 = postmaster@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 =
---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}