Arch Linux:Dovecot Sieve脚本不能编译

  • Arch Linux
  • Linux内核4.9.36(64位)
  • 鸽舍2.2.31(65cde28)
  • SpamAssassin版本3.4.1在Perl版本5.26.0上运行
  • 鸽子孔0.4.19-1

尝试按照Arch Linux Wiki的Sieve教程 (我遵循虚拟用户邮件系统教程结束了这个教程 )设置邮件服务器。


这应该启用spamtestspamtestplus 。 逐字sieve_trace_debug Wiki除了sieve_trace_debug之外所要求的sieve_trace_debug并删除文档的可读性。

/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 } 

这应该是路由垃圾邮件到一个垃圾邮件文件夹。

/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"; } 

试图编译以上。

$ 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' 

没有工作,因为它无法findspamtestspamtestplus 。 所以我testing了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. 

显然它甚至不能读取/etc/dovecot/conf.d/90-sieve.conf ? 而且在等号上窒息?

看来,如果我修复这个错误,我可以启用spamtestspamtestplus ,这将反过来[可能]修复sievec编译错误。


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 } 

Dovecot根本不是来源于你筛选的configuration。 如果你使用“per-feature”configuration文件,你的/etc/dovecot/dovecot.conf文件应该包含一个像

 # 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 

它在conf.d生成单独的configuration文件。