一种方法是使用来自Gertjan van Noord 的perl TextCat 包。
text_cat 脚本为邮件输出最可能的语言。这个秘籍假定text_cat 已经安装在/usr/local/bin 下。
这里有一个简单的procmail 方法来调用text_cat 脚本:
:0
* ^Subject.*Jobs.*Board
{
LANG_=`/usr/local/bin/text_cat`
:0
* ! LANG ?? ^english$
/dev/null
:0
jobs/
}
我已经运行 text_cat 好几年了。没有任何非英语消息被归类为英语,也就是说,没有误报。我在检查假阴性方面并不严格。
tripleee 在评论中提到的第二种方法是使用spamassassin 提供的语言分类,它也使用 text_cat 脚本。 Spamassassin 将解开任何 MIME 传输编码,而上面的 vanilla text_cat 版本不会。
这是一个未完全测试 procmail 用于过滤 spamassassin X-Spam-Languages 标头的方法:
:0
* ^Subject.*Jobs.*Board
{
# Delete non-english language emails using spamassassin header
# Test for not X-Spam-Languages: en
:0
* !^X-Spam-Languages: en$
foreign/
# Save english language mails in folder
:0
jobs/
}
警告: spamassassin 有时会提供多种语言分类,如下所示:
X-Spam-Languages: en da ro
上面的配方没有考虑到。
Spamassassin 语言分类配置
编辑 /etc/spamassassin/v310.pre 并取消注释以下行:
loadplugin Mail::SpamAssassin::Plugin::TextCat
在/etc/spamassassin/local.cf中配置插件:
ok_languages en # I understand english
inactive_languages '' # Enable all languages
add_header all Languages _LANGUAGES_
# score UNWANTED_LANGUAGE_BODY 5 # Increase score - not necessary and not recommended
此配方未通过 spamassassin 3.4.2 版的完整测试。
要调整这些答案以排除不同的语言,需要在第一种情况下用另一种语言替换 english,在第二种情况下用另一种 2 字符语言代码替换 en。