Spam

Arch Linux:Dovecot Sieve 腳本無法編譯

  • August 31, 2017
  • Arch Linux
  • Linux 核心 4.9.36(64 位)
  • 鴿舍 2.2.31 (65cde28)
  • 在 Perl 版本 5.26.0 上執行的 SpamAssassin 版本 3.4.1
  • 鴿巢 0.4.19-1

嘗試按照 Arch Linux Wiki 的Sieve 教程(我從遵循虛擬使用者郵件系統教程結束)來為第一批人設置郵件伺服器。


這應該啟用spamtestspamtestplus。逐字記錄 Wiki 所要求的內容,但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’

沒有工作,因為它找不到spamtestand spamtestplus。所以我測試了配置。

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?它在等號上窒息?

看來如果我修復了這個錯誤,我可以啟用spamtestand spamtestplus,這反過來會

$$ potentially $$修復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 = &lt;/etc/ssl/private/vmail.crt
ssl_key =  # hidden, use -P to show it
userdb {
 args = /etc/dovecot/dovecot-sql.conf
 driver = sql
}

Dovecot 根本不提供您的篩網特定配置。如果您使用“per-feature”配置文件,您的/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

引用自:https://serverfault.com/questions/871235