0
  • Arch Linux
  • Linux kernel 4.9.36 (64-bit)
  • Dovecot 2.2.31 (65cde28)
  • SpamAssassin version 3.4.1 running on Perl version 5.26.0
  • Pigeonhole 0.4.19-1

Trying to set up a mail server for the firs by following the Arch Linux Wiki’s Sieve tutorial (which I wound up on from following the Virtual user mail system tutorial).


This is supposed to enable spamtest and spamtestplus. Verbatim what the Wiki calls for with the exception of sieve_trace_debug and stripping out the docu-comments for legibility.

/etc/dovecot/conf.d/90-sieve.conf:

plugin {
  sieve = file:~/sieve;active=~/.dovecot.sieve

  # Start Arch Linux Wiki Config <https://wiki.archlinux.org/index.php/Dovecot#Sieve>
  sieve_extensions = +spamtest +spamtestplus

  sieve_spamtest_status_type = score
  sieve_spamtest_status_header = \
    X-Spam_score: (-?[[:digit:]]+\.[[:digit:]]).*
  sieve_spamtest_max_value = 5.0

  sieve_before = /var/lib/dovecot/sieve/global_sieves/move_to_spam_folder.sieve
  # End Arch Linux Wiki Config

  sieve_trace_debug = yes
}

This is supposed to route SPAM e-mails into a Junk folder.

/var/lib/dovecot/sieve/global_sieves/move_to_spam_folder.sieve:

require "spamtestplus";
require "fileinto";
require "relational";
require "comparator-i;ascii-numeric";

if spamtest :value "ge" :comparator "i;ascii-numeric" "5" {
  fileinto "Junk";
}

Tried to compile the above.

$ sudo sievec /var/lib/dovecot/sieve/global_sieves/move_to_spam_folder.sieve:

move_to_spam_folder: line 1: error: require command: unknown Sieve capability `spamtestplus'.
move_to_spam_folder: line 6: error: unknown test 'spamtest' (only reported once at first occurrence).
move_to_spam_folder: error: validation failed.
sievec(foo): Error: failed to compile sieve script '/var/lib/dovecot/sieve/global_sieves/move_to_spam_folder.sieve’

Didn’t work because it couldn’t find spamtest and spamtestplus. So I tested the configuration.

sudo sieve-test -t - -Tlevel=matching /etc/dovecot/conf.d/90-sieve.conf /home/foo/test.eml:

90-sieve.conf: line 2: error: unexpected character(s) starting with '='.
90-sieve.conf: line 2: error: expected end of command ';' or the beginning of a compound block '{', but found unknown characters.
90-sieve.conf: line 2: error: unexpected character(s) starting with '~'.
90-sieve.conf: line 2: error: unexpected character(s) starting with '='.
90-sieve.conf: line 2: error: expected end of command ';' or the beginning of a compound block '{', but found unknown characters.
90-sieve.conf: line 2: error: unexpected character(s) starting with '.'.
90-sieve.conf: line 2: error: unexpected character(s) starting with '.'.
90-sieve.conf: line 5: error: unexpected character(s) starting with '='.
90-sieve.conf: line 5: error: unexpected character(s) starting with '+'.
90-sieve.conf: line 5: error: unexpected character(s) starting with '+'.
90-sieve.conf: line 7: error: unexpected character(s) starting with '='.
90-sieve.conf: line 8: error: unexpected character(s) starting with '='.
90-sieve.conf: line 8: error: unexpected character(s) starting with '\'.
90-sieve.conf: line 9: error: unexpected character(s) starting with '-'.
90-sieve.conf: line 9: error: unexpected character(s) starting with '-'.
90-sieve.conf: line 9: error: unexpected character(s) starting with '+'.
90-sieve.conf: line 9: error: unexpected character(s) starting with '.'.
90-sieve.conf: line 10: error: unexpected character(s) starting with '='.
90-sieve.conf: line 10: error: unexpected character(s) starting with '.'.
90-sieve.conf: line 12: error: unexpected character(s) starting with '='.
90-sieve.conf: line 12: error: unexpected character(s) starting with '.'.
90-sieve.conf: line 15: error: unexpected character(s) starting with '='.
90-sieve.conf: error: parse failed.

Apparently it can’t even read /etc/dovecot/conf.d/90-sieve.conf? And it’s choking on the equals sign??

It seems if I fix this error, I can enable spamtest and spamtestplus, which will in turn [potentially] fix the sievec compilation error.


doveconf -n:

# 2.2.31 (65cde28): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.4.19 (e5c7051)
# OS: Linux 4.9.36-x86_64-linode85 x86_64 Arch Linux
mail_home = /home/vmail/%d/%n
mail_location = maildir:~
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
passdb {
  args = /etc/dovecot/dovecot-sql.conf
  driver = sql
}
protocols = imap pop3
service auth {
  unix_listener auth-client {
    group = postfix
    mode = 0660
    user = postfix
  }
  user = root
}
ssl_cert = </etc/ssl/private/vmail.crt
ssl_key =  # hidden, use -P to show it
userdb {
  args = /etc/dovecot/dovecot-sql.conf
  driver = sql
}
  • 1
    /etc/dovecot/conf.d/90-sieve.conf is not sieve, but Dovecot configuration -- sieve-test will not be able to understand it. What's the output of doveconf -n? – Jens Erat Aug 30 '17 at 16:29
  • @JensErat Edited the OP. – Hugh Guiney Aug 31 '17 at 11:00
0

Your sieve-specific configuration is not sourced by Dovecot at all. If you use "per-feature" configuraiton files, your /etc/dovecot/dovecot.conf file should include a statement like

# Most of the actual configuration gets included below. The filenames are
# first sorted by their ASCII value and parsed in that order. The 00-prefixes
# in filenames are intended to make it easier to understand the ordering.
!include conf.d/*.conf

which sources the individual configuration files in conf.d.

  • Thank you, that did the trick. The Arch Linux Wiki article completely left that part out. In fact, it even warns against it, saying: “Note: If you instead want to modify dovecot.conf.sample, beware that the default configuration file imports the content of conf.d/*.conf. Those files call other files that aren't present in our configuration.” – Hugh Guiney Sep 4 '17 at 13:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.