ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:38.82KB ,
资源ID:3507253      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3507253.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(RFC3028滤网一种邮件过滤语言.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

RFC3028滤网一种邮件过滤语言.docx

1、RFC3028滤网一种邮件过滤语言组织:中国互动出版网(http:/www.china-RFC文档中文翻译计划(http:/www.china-E-mail:ouyangchina-译者:王安鹏(anpengwang anpengwang)译文发布时间:2002-1-9版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须保留本文档的翻译及版权信息。Network Working Group T. ShowalterRequest for Comments: 3028 Mirapoint, Inc.Category: Standards Track January 2

2、001滤网:一种邮件过滤语言(RFC3028Sieve: A Mail Filtering Language)本备忘录的状态本备忘录为Internet社区描述了一种Internet标准跟踪协议,需要讨论和建议以进一步改进,关于本协议的便转化进程和状态请参阅“Internet正式协议标准”(STD 1)。本备忘录的发布没有限制。版权信息 Copyright (C) The Internet Society (2001). All Rights Reserved.摘要本文档描述了一种语言,用于在最终递交时过滤电子邮件,可以同时用于客户端和服务器端。设计的目标是易于扩展、应用简便,并独立于访问协议、

3、邮件架构和操作系统。这种语言适合于在那些不允许用户执行任何程序的邮件服务器上运行,比如暗箱Internet消息访问协议(IMAP)服务器,它不允许使用变量和循环结构,也不能调用外部程序。目录1. 简介 21.1. 本文档使用的约定 31.2. 邮件消息样例 32. 设计 42.1. 语言的形式 42.2. 空白字符 42.3. 注释 52.4. 文字数据 52.5. 测试 62.6. 参数 62.7. 字符串的比较 72.8. 块 82.9. 命令 92.10. 求值 93. 控制命令 103.1. 控制结构if 103.2. 控制结构Require 113.3. 控制结构Stop 114.

4、动作命令 114.1. 拒收(reject) 114.2. 转存(fileinto) 124.3. 转发(redirect) 124.4. 保存(keep) 124.5. 丢弃(discard) 125测试命令 135.1. 地址测试(address) 135.2. 与测试(allof) 135.3. 或测试(anyof) 145.4. 信封测试(envelope) 145.5. 存在测试(exists) 145.6. false测试 155.7. 头测试(header) 155.8. 非测试(not) 155.9. 长度测试(size) 155.10. true测试 156. 扩展特性 16

5、61功能描述串 166.2. IANA方面的问题 166.3. 功能迁移 177. 传输 178. 解析(Parsing) 188.1. 词法记号 188.2. 语法 199. 扩展的例子 2010. 安全性问题 2111. 鸣谢 2112. 作者地址 2213. 参考 2214. 版权声明 231. 简介本文提出了一种可用于实现电子邮件过滤的语言,不依赖于任何操作系统或者邮件框架。这种语言要求消息必须符合IMAIL标准,但是把这一规范推广到许多其他的系统。这种语言具有强大的功能,但是为了保证服务器过滤系统的安全而作了一些限制。这样做的目的是除了编写简单的邮件过滤器(可以很方便地建立过滤器的图

6、形用户界面),避免用户做更复杂的(危险的)操作。这种语言还不完备,不能编写循环语句,也没有提供变量和函数。用滤网编写的描述程序在最终完成递送的时候就是说邮件要移动到用户可以访问的邮箱时执行。在MTA完成最后递交工作的系统中,比如传统的UNIX邮件系统,MTA最终把邮件堆放到用户信箱中时还要作适当的排序处理。使用邮件过滤有多方面的原因。随着电子邮件的普及,主动邮件如广告的出现以及邮件列表的大量使用,许多用户遇到了邮件拥塞的问题。卡内基.梅隆的经历表明,只要存在可用的过滤系统,许多人都会使用它来滤掉来自特定用户或列表的消息。但是由于设置困难,许多人并没有使用安德鲁系统的FLAMES过滤语言。因此为

7、了使用户方便地使用过滤,这种语言设计的尽量简单,但同时又具有足够的能力完成工作。对于多数用户而言,最好是提供一种图形用户界面的过滤编辑器。1.1. 本文档使用的约定这一节说明本文中涉及到的各种关键字和操作符的明确含义,约定如下。文中关键字“MUST”、“MUST NOT”、“SHOULD”、“SHOULD NOT”和“MAY”的含义按照KEYWORDS的解释。在描述命令(测试、动作或控制结构)时都有一行以“语法:”开始,说明命令的语法,包括命令名和参数。不能缺少的参数放在一对尖括号内,可选参数则放在一对方括号内。每个参数后面都跟着数据类型,比如“”表示一个字符串类型的参数key。与ABNF类似

8、,文字串用引号表示,转义字符使用斜杠标志,允许使用括号进行组合。在语法描述中,经常会遇到一些语法片段,如MATCH-TYPE、COMPARATOR和ADDRESS-PART,详细含义参见后述。第10节所描述的形式命令语法仅仅作为构造命令的权威参考,但是形式语法没有规定命令形式参数的顺序、语义、个数和类型,也没有规定哪些命令名是合法的,形式语法的意义在于以后对该语言进行扩展时可以保证语法的一致性。1.2. 邮件消息样例下面是本文所使用的邮件样例。 Message A - Date: Tue, 1 Apr 1997 09:06:31 -0800 (PST) From: coyotedesert.e

9、xample.org To: roadrunner Subject: I have a present for you Look, Im sorry about the whole anvil thing, and I really didnt mean to try and drop it on you from the top of the cliff. I want to try to make it up to you. Ive got some great birdseed over here at my place-top of the line stuff-and if you

10、come by, Ill have it all wrapped up for you. Im really sorry for all the problems Ive caused for you over the years, but I know we can work this out. - Wile E. Coyote Super Genius coyotedesert.example.org - Message B - From: youcouldberich!reply-by-postal-mail.invalid Sender: b1ff To: rubelandru.exa

11、mple.edu Date: Mon, 31 Mar 1997 18:26:10 -0800 Subject: $ YOU, TOO, CAN BE A MILLIONAIRE! $ YOU MAY HAVE ALREADY WON TEN MILLION DOLLARS, BUT I DOUBT IT! SO JUST POST THIS TO SIX HUNDRED NEWSGROUPS! IT WILL GUARANTEE THAT YOU GET AT LEAST FIVE RESPONSES WITH MONEY! MONEY! MONEY! COLD HARD CASH! YOU

12、WILL RECEIVE OVER $20,000 IN LESS THAN TWO MONTHS! AND ITS LEGAL! !111111111!11111111111!1 JUST SEND $5 IN SMALL, UNMARKED BILLS TO THE ADDRESSES BELOW! -2. 设计2.1. 语言的形式该语言由一系列命令组成,命令由多个空白字符分隔的记号组成。命令标识符是第一个记号,后面可以有多个参数记号(也可以没有),参数可以是文字数据、标签、命令块或者测试命令。该语言用UTF-8表示,ASCII记号区分大小写。2.2. 空白字符空白字符用于分隔记号,包括制

13、表符、新行字符(CRLF,不能只使用CR或LF)和空格,不考虑空白字符的个数。2.3. 注释该语言提供了两种类型的注释,注释在语义上与空白字符是等效的,空白字符可以出现的地方都可以使用注释(只有一个例外,即多行字符串,参见后述)。第一种格式是使用一个井号字符“#”(必须在表示字符串的引号外),后面的字符串直到下一个回车换行符都被视作注释内容。例如: if size :over 100K # this is a comment discard; 。第二种方法是使用记号“/*”和“*/”(不能在字符串引号内),这样的注释可以是多行的,但不能嵌套,如: if size :over 100K /* t

14、his is a comment this is still a comment */ discard /* this is a comment */ ; 2.4. 文字数据文字是指作为命令参数的非执行数据,仅仅就其本身取值,仅限于数字和字符串。2.4.1. 数字数字是普通的十进制数, 不过那些很大的数值比如消息的长度后面可以加上表示2的幂的字符“K”、“M”或者“G”。它们的含义按照通常使用的国际单位制,K表示千或1024,M表示百万或1048576,G表示十亿或1073741824(2的30次幂)。具体的实现至少要提供31bit的量级,本规范只使用正整数。2.4.2. 字符串该描述语言在很

15、多地方要使用字符串,比如模式匹配、地址以及文本体等等。一般来说,大多数情况下使用引号括起来的短字符串就足够了,但是还提供了一种适用于长字符串如消息体的字符串格式。引号字符串开始和结束都是双引号字符(ASCII 34)引号字符串中可以包含反斜杠字符,但它后面必须是反斜杠或者双引号,前者表示反斜杠字符本身,后者表示字符串中的引号。未经定义的转义序列作为不含反斜杠的序列处理(比如“a”就认为是“a”)。引号字符串中不能包含制表符、回车换行符和控制字符之类的非打印字符。引号字符串允许跨行,但不能包含空字符NUL(ASCII 0)。为了便于处理大量的文本,该语言还提供了一种多行字符串。多行字符串一“te

16、xt:”和一个回车换行符开始,最后以回车换行、句点和回车换行符结束。为了避免与只包含一个句点的信息行混淆,我们采用填充法,即对于那些第一个字符是“.”的行在前面再人为增加一个额外的“.”。服务器对这样的描述语句解释时再把多余的句点去掉。注意,对于以句点开头但后面跟着的字符不是“.”的行,不作为句点填充处理,就是说“.foo”仍然是“.foo”。由于这种情况有可能造成混乱,因此编辑器必须正确的处理句点填充避免出现这种情况。注意,在“text:”和CRLF之间可以加入斜杠开始的注释成分,但不能插入到字符串本身,也不允许使用“#”开始的注释。2.4.2.1. 字符串列表由于模式匹配经常对一组字符串进

17、行匹配,因此许多测试命令允许使用字符串列表,只要测试对其中的一个字符串成立测试结果即为真。建议实现时对这种情况采用短循环求值的方法。比方说,对于测试命令“header :contains To, Cc me, me00landru.example.edu”,只要输入的消息包含邮件地址me或者me00landru.example.edu中的一个,测试结果即为真。相反,只要允许使用字符串列表的地方,都可以使用单个的字符串,它被认为是只有一个成员的字符串列表。就是说,测试命令“exists “to”和“exists “to”是等价的。2.4.2.2. 信息头信息头是一个字符串子集,根据Interne

18、t消息规范IMAIL,RFC1123,每行信息头差不多任何地方都可以使用空白字符,在消息头的名称和后面的冒号之前也允许出现空白字符,但是消息头名称和后面冒号之间的空白字符在处理时被忽略掉。消息头名称不能包含冒号,比如“From”表示以“From:”或“From :”开始的一行消息头,但是没有任何消息头与字符串“From:”匹配。对数据进行解释之前,跨行的消息头要合并成一行,各行位的CRLF以及下一行的前导空格转换成单个空格。2.4.2.3. 地址有几个处理邮件地址的命令,邮件地址也是一种特殊的字符串。如果地址字符串需要用于其它的应用环境,除了必须符合IMAIL的规定外,还有其他的限制。按照IM

19、AIL第6.1节定义的符号,地址的语法格式为: sieve-address = addr-spec ; simple address / phrase ; name & addr-spec就是说,地址中不能出现路由或者地址组语法,如果需要使用多个地址,必须是用字符串列表,而不能用命名的地址组。实现必须保证地址的语法是有效的,但不要求必须是邮件接收方。2.4.2.4. MIME部分在少数几个地方,MIME消息体部分也用字符串表示,其中包括MIME头部和消息体。这样就提供了一种在滤网描述语言程序中嵌入其它类型数据的方法,从而能够在输出的消息中使用UTF-8之外的字符集。2.5. 测试测试作为命令的

20、参数用于控制命令的行为方式。在本文中,测试以if/elseif/else的方式给出,根据测试结果选择要执行的代码段。测试不能有副作用,就是说不能改变过滤器和消息的状态。本规范规定的测试都没有副作用,同样的限制也适用于扩展测试命令。这样做是因为带有副作用的测试难以阅读和维护,而且不方便通过图形用户界面生成描述语句。只有那些作用明确的动作才允许改变过滤器的状态。2.5.1. 测试列表有些测试可能需要多个测试参数(比如分别对应逻辑与和逻辑或的“allof”和“anyof”),测试列表元素提供了成组测试的方法。例如:if anyof (not exists From, Date, header :co

21、ntains from foolexample.edu) discard; 2.6. 参数大多数命令都需要参数指明要执行的操作,参数分为三类:位置参数,标志参数和可选参数。2.6.1. 位置参数位置参数的含义依赖于给出的顺序,因此使用位置参数必须按照的规定的顺序给出。2.6.2. 标志参数本文档规定的标志参数以类似于Common LISP的风格给出,大多数命令行系统也采用相似的方式给命令传递标志。标志参数以冒号“:”开始,后面跟着参数的标识名,比如“:contains”。标志参数的意思是后面的各个记号(可能没有)根据前面的标识名可能有特殊的含义。标志参数后面的记号可以是数字或者字符串,但不能是

22、块。标志参数与位置参数很相似,只不过其含义取决于标志而不是命令本身。标志参数必须出现在位置参数之前,但是不同的标志参数的顺序可以是任意的。为了简化规范,在命令的语法定义中并没有作此规定,但是只要保证出现在位置参数之前,标志参数的位置可以互相交换。标志参数和可选参数可以混合使用。为了简化,标志参数不能再使用标志参数作为参数。2.6.3. 可选参数可选参数与标志参数非常相似,只不过调用命令时可以不提供可选参数而采用某个缺省值。由于可选参数能够有效地简化描述程序,因此比标志参数用的更广泛。特别一提的是“:comparator”参数,这个参数用于指定字符串比较所使用的ACAP比较运算子,因为UTF-8

23、定义的某些语言可能采用的不同的字符序。2.6.4. 参数类型简单地讲,参数可以是文字数据、测试或者命令块。从这意义上说,“if”控制结构只不过是以测试和命令块作为参数而且能够执行那个代码块的一个命令。但是这种笼统的提法从解析的观点来看可能会产生混乱,第9.2节对此给出了更明确的定义:参数是字符串列表、数字和标志,后面可以带有测试或测试列表,还可以带有命令块。但是测试或者测试列表以及命令块不能超过一个,以命令块结束的命令后面不能有分号。2.7. 字符串的比较字符串的匹配方式有多种,可以分为三种类型:完全匹配、子串匹配或通配符块方式的匹配,分别描述如下。为了实现不同字符集和大小写字符之间的匹配,滤

24、网语言借用了ACAP的比较运算子注册。但是对于表示信息头名称的字符串之间的比较不能使用用户指定的运算子。信息头的比较总是使用“i;ascii-casemap”运算子,就是说这种比较是大小写敏感的,因为IMAIL消息规范是如此规定的。2.7.1. 匹配类型本规范使用了三种匹配类型:“:is”、“:contains”和“:matches”,可以作为标志参数传递给适当的命令。“:contains”类型描述的是子串匹配,只要后面的值参数中包含键参数,匹配的结果即为真。比如,字符串“frobnitzm”包含“frob”和“nit”,但是不含“fbm”,空键值(“”)是任何串值的子串。“:is”类型描述的

25、是完全匹配,只有第一个字符串的内容与第二个字符串的内容完全一致时才算匹配成功,字符串“frobnitzm”仅仅与其自身匹配,空键值也仅仅是空键值。“:matches”则使用字符“*”和“?”规定通配符,“*”表示0或多个字符,“?”表示单个字符。要与这两个字符本身匹配时必须是用双斜杠进行转义,即分别使用“*”和“?”。前一个斜杠对第二个进行转义,两者合在一起对后面的“*”转义,虽然有点罗嗦,不过在一些使用团块和正则表达式的程序语言中也很常见。为了明确采用何种类型的匹配,可以使用标志参数“:match”、“:is”和“:contains”,如果没有指定匹配方式,则缺省采用“:is”。要注意,这些

26、修饰成分与比较运算子相互作用,某些比较运算子无法与“:matches”和“:contains”一起工作,如果强制使用就会造成错误。每个命令只能使用一个匹配参数,否则就是错误的。为了方便说明,我们把匹配类型语法成分定义如下: :is / :contains / :matches2.7.2. 跨字符集的比较滤网描述语言用UTF-8表示,但是消息中可能使用多个字符集,因此实现时应该完成跨字符集的比较运算。实现必须把消息头使用的字符集转换成UTF-8编码,只要两个字符串的UTF-8编码相等,就认为两个字符串时相同的。另外,无论是消息头还是消息体,只要采用MIME规定的形式,都应能够对其解码,包括ISO

27、-8859-*字符集UTF-8的ASCII子集、US-ASCII、ISO-8859-1。如果实现上有困难,则至少要保证只要两个字符串有一个包含大于127的字节则两者不等。2.7.3. 比较运算子匹配类型还可以带有一个比较运算子,以实现语言无关、大小写无关的串匹配。比较运算子在ACAP中描述,ACAP定义注册项,本规范则引用那些注册项。ACAP定义了许多比较类型,单本规范仅仅是用相等比较。本语言的任何实现都必须支持“i;octet”运算子(简单的字节比较)和“i;ascii-casemap”运算子(把UTF-8的ASCII子集的大写字符和小写字符视作同一个字符)。如果没有明确规定,缺省使用“i;

28、ascii-casemap”。某些比较运算子不适用于子串匹配,就是说只能用于“:is”匹配。如果试图对“:contains”和“:matches”使用不合适的运算子会造成错误。比较运算子用可选参数“:comparator”指定,语法如下: :comparator 因此在下面的例子中,所有主题类似于“You can MAKEMONEY FAST”的消息都被丢弃,但是由于采用的比较运算子对大小写敏感,以“You can Make Money Fast”为主题的消息就会保留下来。 if header :contains :comparator i;octet Subject MAKE MONEY F

29、AST discard; 其他的比较运算子属于扩展类型,必须声明之后才能使用,未知的运算子会导致操作失败。“:matches”和“:contains”匹配类型都支持“i;octet”和“i;ascii-casemap”比较运算子。运算子参数在一条命令中只能给出一次。2.7.4. 地址之间的比较地址是最常使用的字符串。这种字符串是结构化的,经常需要与某个地址的本地部分和域地址部分进行比较,因此专门处理地址的某些测试允许带有一个额外的可选参数。这个可选参数可以是“:localprat”、“:domain”或“:all”,分别对地址的本地部分、域地址部分和整个地址进行测试。至于比较的方式,比如是否区

30、分大小写由测试的运算子参数指定。省略的情况下默认使用“:all”。地址参数的语法如下: :localpart / :domain / :all2.8. 块块是放在花括号之间的一组命令,引入块是为了使用控制结构。控制结构是一种命令,其参数包括测试和块两部分,根据测试的结果决定块中的代码执行多少次。本规范中提供的命令不包含循环结构,提供的控制结构(if、elseif和else)要么对块执行一次,要么一次也不执行。因此只涉及到两个参数:测试和块。2.9. 命令滤网描述程序由命令组成。命令可以使用上述任何符号作为参数,参数既可以是位置参数,也可以是标志参数,有些命令没有参数。命令分为三类:测试命令、动作命令和控制命令。最简单的是动作命令,动作命令是一个标识符,后面可以没有参数也可以有多个参数,动作命令以分号结束,不能以测试或者块作为参数。控制命

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1