我订阅了一个邮件列表,其中有些邮件是我无法理解的非英语邮件。
如何使用procmail
和/或命令行工具过滤非英语消息以/dev/null
?
我使用procmail
来过滤我的电子邮件,所以理想情况下,任何替代工具也需要一个procmail
配方。
我宁愿不必训练自己的语言模型。
一种方法是使用 Gertjan van Noord 的 perl TextCat 包。
text_cat
脚本输出邮件最可能的语言。 此配方假定text_cat
已安装在/usr/local/bin
下。
下面是调用text_cat
脚本的简单procmail
方法:
:0
* ^Subject.*Jobs.*Board
{
LANG_=`/usr/local/bin/text_cat`
:0
* ! LANG ?? ^english$
/dev/null
:0
jobs/
}
我已经经营text_cat几年了。 没有任何非英语邮件被归类为英语,也就是说,没有误报。 我对检查假阴性并不严格。
第二种方法,正如tripleee在评论中提到的,是使用spamassassin提供的语言分类,它也使用text_cat脚本。 垃圾邮件刺客将解开上面的原版text_cat版本不会包装的任何MIME传输编码。
以下是用于过滤垃圾邮件刺客X-Spam-Languages
标头的未完全测试的procmail
配方:
: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/
}
警告:垃圾邮件刺客偶尔会提供多种语言分类,如下所示:
X-Spam-Languages: en da ro
上述配方没有说明。
垃圾邮件刺客语言分类配置
编辑/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
此配方在垃圾邮件刺客版本3.4.2中进行了不完全测试。
要使这些答案适应排除不同的语言,在第一种情况下将另一种语言替换为english
,在第二种情况下将其他 2 个字符的语言代码替换为en
。
许多现代电子邮件客户端标识电子邮件的字符集,尽管通常不是其语言。如果要丢弃日语,中文,韩语和俄语消息,可以尝试类似
:0HB
* ^Content-type:[ ]*text/[/;]*;[ ]*charset="?(iso-2022|ks-c|gb|koi|cp-1251)
foreign
由于某些客户端在用英语书写时忘记更改字符集,因此可能会产生一些误报,因此我建议保存到文件夹中并定期查看。相反的问题更难;许多外语使用与英语相同的字符集,因此无法像这样可靠地识别。