SIEVE语言的邮件过滤快速向导

用于邮件过滤的SIEVE语言快速指南

什么是SIEVE?

SIEVE是一种创建并用于邮件过滤的语言,用于扩展邮件服务器或反垃圾邮件/防病毒应用程序通常提供的过滤选项。 他们基本上通过使用不同的比较器和比较方法比较不同的密钥,与邮件的标题进行比较。 根据比较结果,您可以对相应的邮件应用不同的操作,即拒绝,丢弃,重定向等。

这种语言提供了非常灵活的过滤方法,用户可以根据需要定义任意数量的脚本过滤器。 旨在轻松实现邮件客户端或邮件服务器(如Sendmail,Qmail,Axigen等),使用SIEVE脚本不依赖于访问协议,邮件架构和操作系统。

SIEVE被设计为提出的互联网标准,由于多家供应商的努力,自从至少1994年以来在各种技术和标准导向的公共和私人会议上进行了讨论

为什么要使用SIEVE过滤器


大多数用户的邮件流量由于电子邮件的使用增加,未经请求的电子邮件作为广告形式的出现以及邮件列表的使用增加而不断增加。

使用SIEVE过滤系统有很多原因:
  • 您可以创建高效灵活的规则。 写入SIEVE的脚本在最终传送期间执行,当消息移动到用户可访问的邮箱时。 因此,当MTA存入邮件到用户的邮箱时进行排序是合理的。
  • SIEVE脚本是一种安全的过滤方法,因为它们不对邮件内容进行操作,而仅从邮件头中提取信息,并根据预定义的规则执行操作。
  • 除了反垃圾邮件和防病毒应用程序,您还可以使用SIEVE脚本来过滤所有合法的电子邮件,从而在使用电子邮件通信时获得速度和效率。

SIEVE语言


一般方面
SIEVE具有描述为标准的固定形式,但可以通过使用扩展来改进。如果系统实现了这些扩展,则扩展机制将起作用。为了使用扩展名,它必须在文件(脚本)的开头用一个require子句进行通告。

require "extension_name"  
or
require ["extension_name1", "extension_name2"]

标准中描述的SIEVE的结构定义了5个动作:保持,保存,拒绝,丢弃,重定向,这是不言自明的。它还定义了3个控制命令:
  • <stop> - 停止对该点的处理
  • <if elsif else>结构
  • require命令 - 定义语言的扩展。

if结构的形式如下:
如果<test> <block>
elsif <test> <block>
else <块>
其中块是一组命令(动作和控制命令 - 包括其他ifs)

在标准表格中,没有任何扩展名,测试可以是以下之一:
  • 地址 - 使用不同的比较方法对一组密钥测试一组地址头;
  • 信封 - 可选测试;
  • 标题 - 使用不同的比较方法对一组键测试一组标题;
  • 真,假常数;
  • allof <其他测试> - 逻辑和几个测试之间;
  • 任何<其他测试> - 逻辑或几个测试之间;
  • 不是<test> - 否定测试;
  • 存在 - 测试是否存在一组标题;
  • 大小 - 测试消息的大小;
测试可以取2个值:true或false。

例子
在“垃圾邮件”文件夹中,将移动所有主题或从“spammer@example.com”收到的所有邮件的SIEVE脚本的简单示例可以写成如下:
require "fileinto"

if anyof(address :is ["From", "Sender"] "spammer@example.com", header :matches "Subject" "Spam")
{
fileinto "Spam";
}
另一个更复杂的例子是一个过滤器,可以拒绝所有具有病毒的邮件,并且是传出的邮件,而不是传入的邮件。后一个例子使用了需要实现的几个扩展。
require ["envelope","virustest","relational","comparator-i;ascii-numeric","reject"];

if allof(virustest :value "eq" :comparator "i;ascii-numeric" "5",
envelope :contains "From" ["domain1.org", "domain2.org"],
not envelope :contains "To" ["domain1.org", "domain2.org"]) {
reject "This mail is from domain.org to the world and contains a virus";
}
有关SIEVE语言的更详细介绍,我们也建议您阅读专用的 RFC 3028

SIEVE过滤器在AXIGEN邮件服务器


目前,AXIGEN使用SIEVE语言进行脚本过滤器定义。任何AXIGEN过滤系统都可以包含不同的用户定义的SIEVE脚本。在AXIGEN中激活时,会为每个过滤器分配一个优先级值。优先级的概念用于定义过滤链中过滤器的顺序。这意味着首先应用具有较高优先级的过滤器。所有SIEVE过滤器可以在多个级别激活:服务器,域或帐户/邮件列表。

AXIGEN还实施了SIEVE度假假期。这意味着SIEVE脚本文件可以创建并应用于生成办公室外自动回复。因此,当假期适用的帐户的用户正在休假,不在办公室或在一般情况下延长时间时,可以发送自动生成的消息。虽然它不是安全功能,但是假期扩展是通过脚本文件提供的额外功能。为了在我们的邮件服务器中实现一个简单的办公室,请参阅我们的知识库中提供的这个示例:

有关AXIGEN中SIEVE语言和脚本实现的详细说明,请参阅我们的 在线文档
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏