⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc3028.txt

📁 很多RFC的中文文档
💻 TXT
📖 第 1 页 / 共 4 页
字号:
如果完全不进行过滤,则“保存”命令代替了所有其他的命令,一般而言就是简单地把
消息转存到用户的主邮箱内。执行该命令不需要知道主邮箱的名称、用户的邮箱设置或者底
层使用的邮件系统。比方说,对于在邮件递交时执行代表用户的描述程序的IMAP服务器,
保存命令就相当于转存到“INBOX”。
   例1:  if size :under 1M { keep; } else { discard; }
注意上述语句等价于下面的命令:
   例2:  if not size :under 1M { discard; }

4.5.    丢弃(discard)
   语法:  discard
“丢弃”命令简单地把消息删除,就是取消了隐含留存操作。如果与其它的动作命令合
用,其他的命令照常执行,即该命令与其他命令是兼容的,比如fileinto + discard就相当于
fileinto。丢弃命令不得产生其它的作用,不得返回任何未递交通知或者其他的[DSN]、[MDN]
消息。下面的语句丢掉任何来自“idiot@example.edu”的邮件:
   例子:  if header :contains ["from"] ["idiot@example.edu"] {
                discard;
             }
虽然该命令是本语言的重要组成部分,但可能给用户带来严重的问题,在公用机房内上
机的学生如果没有退出登录可能会发现它的描述程序都被人改成了“丢弃”命令。为了保护
此类情形下的用户信息,实现可以采用把销毁信息保存一段时间的方法,或者禁止丢弃全部
邮件的描述语句。
5.测试命令
测试命令用于条件控制结构判定执行哪一个条件,实现必须支持以下测试命令: 
"address"、"allof"、"anyof"、"exists"、"false"、"header"、"not"、"size"和"true",应该支持“envelope”
测试。
5.1.   地址测试(address)
   语法:   address [ADDRESS-PART] [COMPARATOR] [MATCH-TYPE]
             <header-list: string-list> <key-list: string-list>
地址测试试图与包含地址的结构头中的Internet地址进行匹配,只要按照指定的比较运
算子和匹配关键字,头中地址的指定部分包含给定的某个关键字,则返回真。该测试与信封
测试和头测试类似,只要头列表和关键字列表中的某两个匹配成功即返回真。
Internet邮件地址标准[IMAL]的某些规定不合情理,@左侧的本地部分大小敏感,而右
侧的域地址部分则不区分大小写。“地址”命令本身并不对此区分,而是通过ADDRESS-PART
参数让用户来处理。地址原语永远不会处理邮件地址中的短语部分或者地址中的说明成分,
也不会处理组名,尽管要处理组结构内的地址。
实现必须把地质测试严格限制在包含地址的头字段内,至少要包括From、To、Cc、Bcc、
Sender、Resent-From和Resent-To,还应该支持其他使用“地址列表”的头字段。
   例子:  if address :is :all "from" "tim@example.com" {
                discard;

5.2.   与测试(allof)
   语法:   allof <tests: test-list>
allof测试对指定的测试项进行逻辑与运算,例如:
             allof (false, false)  =>   false
             allof (false, true)   =>   false
             allof (true,  true)   =>   true
与测试的参数是一个测试列表。
5.3.   或测试(anyof)
   语法:  anyof <tests: test-list>
anyof对指定的测试进行逻辑或运算。
   例子:    anyof (false, false)  =>   false
             anyof (false, true)   =>   true
             anyof (true,  true)   =>   true
5.4.    信封测试(envelope)
   语法:   envelope [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE]
             <envelope-part: string-list> <key-list: string-list>
如果SMTP(或者等价的)信封的指定部分与给定的关键字匹配,则“信封”测试返回
真。如果信封部分的字符串是(不考虑大小写)“from”,那么就与SMTP MAIL命令中使用
的FROM地址进行匹配。如果信封部分的字符串是(不考虑大小写)“to”,则与SMTP RCPT
命令中使用的TO地址匹配。要注意只能使用最近的而且与该用户相关的一个TO。信封部
分是一个字符串列表,,可以包含多个参数,这样的话,关键字列表中的所有字符串都与信
封部分列表中的各个成分进行匹配。与地址测试和头测试类似,只要信封中的某个成分匹配
关键字列表中的一个,测试结果即为真。所有对信封的测试都必须去掉源路径。
如果SMTP会话包括多个RCPT命令,只有把信息传递给该用户的那个RCPT命令数
据才能用于信封的“to”部分。如果传输时使用了SMTP之外的协议,建议实现时相应地对
该命令进行调整。
信封命令时可选的,实现应该支持这个命令,但某些时候可以得不到可用的信息。
   例子:  require "envelope";
             if envelope :all :is "from" "tim@example.com" {
                discard;
             }

5.5.  存在测试(exists)
   语法:   exists <header-names: string-list>
如果消息中包含头字段名参数中列出的头字段,则存在测试返回真——必须所有给定的
头字段都存在。下面的例子丢弃了没有From和Date头字段的所有邮件:
例子;  if not exists ["From","Date"] {
                discard;
             }

5.6.   false测试
   语法:   false
“false”测试总是返回假。
5.7.   头测试(header)
   语法:   header [COMPARATOR] [MATCH-TYPE]
             <header-names: string-list> <key-list: string-list>
只要一个头字段名与给定关键字中的某一个匹配,“头”测试就返回真。匹配类型由可
选的匹配参数指定,如前所述,如果没有给出这个参数则缺省使用“:is”。与地址测试和信
封测试类似,只要字符串列表任一项与关键字列标参数中的某一个相匹配,测试的结果即为
真。如果头字段名参数列出的头字段存在,则包含空键值(“”),否则不能包含空键值。因
此如果消息包含这样的头字段X-Caffeine: C8H10N4O2,则测试结果如下:
           header :is ["X-Caffeine"] [""]         => false
           header :contains ["X-Caffeine"] [""]   => true

5.8.   非测试(not)
   语法:   not <test>
“not”测试的参数是其他的测试,返回与参数相反的结果,“not false”相当于“true”,
“not true”等价于“false”。
5.9.   长度测试(size)
   语法:   size <":over" / ":under"> <limit: number>
“size”测试检查消息的长度,该命令的参数包括一个标志参数“:over”或者“:under”
和表示消息大小的一个数字。如果使用“:over”参数,则只有消息的长度超过给定大小时
才返回真;如果使用了“:under”参数,则仅当消息的长度不超过给定大小时才返回真。必
须指定这两个标志参数中的一个。消息的长度定义为从消息头的第一个字节开始到消息体的
最后一个字符结束的全部字节数。注意,如果某个消息恰好是4000个字节,则它既不超过
(over)也不少于(under)4000个字节。
5.10.  true测试
   语法:   true
“true”测试的结果永远是真。
6.  扩展特性
本语言允许增加新的结构、动作或者测试,网站必须把它所提供的扩展功能通知用户,
本规范没有定义如何获取服务器所提供的扩展功能列表。本语言的任何扩展必须定义一个功
能描述字符串唯一标识该扩展。如果扩展功能的新版本改变了功能或者原来的定义,则必须
使用一个新的描述串。如果存在一个提交协议和清楚本语言细节的扩展说明机制,那么提交
的描述程序可以通过检查邮件服务器禁止使用该服务器不支持的扩展。扩展必须明确自身与
其它操作的关系,就是要说明它是否禁止隐含留存,能够与那些操作兼容,与那些操作不兼
容。
6.1功能描述串
功能描述串通常是描述服务器所支持的功能的短字符串。以“vnd”开头的功能描述串
表示供应商定义的扩展,此类扩展未经Internet标准或RFC定义,但是为了避免引起混乱经
过了IANA的注册。以“vnd”开始的功能描述串后面应该跟上供应商或者产品的名称,比
如“vnd.acme.rocket-sled”。
本规范定义的功能描述串包括:
   envelope    串“envelope”表示该实现支持“信封”命令。
   fileinto      串“fileinto”表明该实现支持“转存”命令。
   reject       串“reject”表明该实现支持“拒收”命令。
   Comparator  如果实现支持“elbonia”比较运算子,则提供串“comparator-elbonia”,
因此所有的实现至少要支持“comparator-i;octet”和“comparator-i;ascii-casemap”,但是使用
这两个运算子不需要事先用require声明。
6.2.  IANA方面的问题
为了建立一个标准的扩展集,IANA提供了一项注册事务,按照先来先提供的原则对扩
展功能进行注册,用于交互的扩展应该定义为标准跟踪或者IESG认可的实验性RFC。
6.2.1.  功能注册模板
可以使用如下的模板向IANA请求注册对滤网语言的新扩展。

   To: iana@iana.org
   Subject: Registration of new Sieve extension

   功能名Capability name:
   关键字Capability keyword:
   功能参数Capability arguments:
   标准号Standards Track/IESG-approved experimental RFC number:
   联系地址Person and email address to contact for further information:

6.2.2.   功能注册的最初内容
以下是经过IANA注册的基本的滤网语言扩展内容:
   功能名:      fileinto
   关键字:      fileinto
   参数:        fileinto <folder: string>
   标准号:      RFC 3028 (Sieve base spec)
   联系地址:    Tim Showalter    tjs@mirapoint.com

   功能:        reject
   关键字:      reject
   参数:        reject <reason: string>
   标准号:      RFC 3028 (Sieve base spec)
   联系地址:    Tim Showalter     tjs@mirapoint.com

   功能:       envelope
   关键字:     envelope
   参数:       envelope [COMPARATOR] [ADDRESS-PART] [MATCH-TYPE]
                <envelope-part: string-list> <key-list: string-list>
   标准号:     RFC 3028 (Sieve base spec)
   联系地址:  Tim Showalter      tjs@mirapoint.com

   功能:        comparator-*
   关键字:      comparator-* (anything starting with "comparator-")
   参数:        (none)
   标准号:     RFC 3028, Sieve,参考RFC 2244
   联系地址:   Tim Showalter     tjs@mirapoint.com
6.3.    功能迁移
由于本规范所应用的邮件系统是各种各样的,具体的实现又各有不同,因此无法说明某
个实现所支持的功能,但是具体的实现应该具有这样一种机制,能够列出所支持的完整的扩
展集。
7.   传输
滤网描述程序的MIME类型为“application/sieve”。RFC 2048要求对该类型的注册如下:
    主题:注册MIME媒体类型application/sieve

    MIME媒体类型名称: application
    MIME 字类型名: sieve
    必要的参数:无
    可选参数:无
    编码要求:大多数滤网描述成分应该是UTF-8格式的文本,如果没有使用7位字
符,对于使用7位字符的传输系统应使用引号括起来的可打印字符。

    安全性问题:在RFC2048的第10节讨论。
    交互性问题:在RFC 3028的第2.10.5节讨论。
    正式规范:  RFC 3028.
    应用该媒体类型的程序:支持滤网语言的邮件服务器
    附加信息:
      幻数(Magic number):
      文件扩展名: .siv
      Macintosh文件类型码:
    联系地址
       参见ietf-mta-filters@imc.org的讨论列表。
    应用范围:
       COMMON(通用)
    作者/负责控制变动的人员:
       参见RFC 3028的作者信息

8.      解析(Parsing)
像大多数语言一样,滤网语法也分为记号和单独的语法。
8.1.    词法记号
滤网描述语言采用UTF-8编码,在下面的说明中假设滤网描述语言所使用的合法UTF-8
的特殊字符都是ASCII字符。
滤网语言中的记号包括:标识符、标签、数字、引号字符串、多行字符串和其他分隔符。
空白、水平制表符、回车换行符和注释(“空白字符”)仅仅作为分隔记号,相邻的记号
之间和多行字符串的某些特定位置需要使用空白字符分隔。其他的分隔符都是单独的字符,
并且在语法中有明确的定义。滤网的词法结构采用如下的BNF范式定义(参见[ABNF])。
   bracket-comment = "/*" *(CHAR-NOT-STAR / ("*" CHAR-NOT-SLASH)) "*/"
           ;; No */ allowed inside a comment.
           ;; (No * is allowed unless it is the last character,
           ;; or unless it is followed by a character that isn't a
           ;; slash.)

   CHAR-NOT-DOT = (%x01-09 / %x0b-0c / %x0e-2d / %x2f-ff)
           ;; no dots, no CRLFs

   CHAR-NOT-CRLF = (%x01-09 / %x0b-0c / %x0e-ff)

   CHAR-NOT-SLASH = (%x00-57 / %x58-ff)

   CHAR-NOT-STAR = (%x00-51 / %x53-ff)

   comment = bracket-comment / hash-comment

   hash-comment = ( "#" *CHAR-NOT-CRLF CRLF )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -