当前位置: 主页 > 服务器技术 > Mail服务器 > maildrop中文帮助手册

maildrop中文帮助手册

时间:2010-6-30来源:互联网 点击:

权重打分

模式被maildrop求值作为任何别的数值表达式。如果一个模式被发现,出于过滤得目的,maildrop的过滤将模式匹配的结果作为数字1,或者真。如果模式没有被发现,模式搜索的结果是0。一旦一个模式被发现,搜索停止。第二个相同的模式和后面的模式都不再被搜索。

maildrop也能做权重打分。在权重打分时,相同模式的多个出现被用来累积数字分值。

要使用权重打分,像下面这样指定模式:
/pattern/:options,xxx,yyy
xxx和yyy是两个数字,yyy是可选的 –如果没写出的话,它将默认为1。

第一个出现的模式被评分为xxx。第二个出现的模式被评分为xxx*yyy,第三个出现的是xxx*yyy*yyy,等等。所有模式的出现被增加来累计最后的得分。

注意:当w选项没有被指定时,maildrop不能识别同一行内同一模式的多次出现。这是为了^和$操作符正确工作所必需的。例如:/^Received:/:1
该模式计算信件有多少 Received: 信头,并且不能识别文本”Received:”在信头其他任何地方的任何出现。

为了考虑同一信件内的相同模式的多次出现,你应该指定w选项。这也激活所有的’w‘选项的惯用语义。例如:
/[:upper:]/:wbD,1
计算大写字母在信体内出现的次数。

################################################################
模式匹配结果

模式被成功地匹配之后,匹配的实际文本被放入MATCH变量内。比如:
/^From:.*/ 匹配一行这样的格式:From: postmaster@localhost
这里,变量MATCH将被设置为”From: postmaster@localhost“,该变量可被用到后面的语句中。在模式中使用!字符使得使用匹配字符串的可选部分成为可能。例如:/^From: *!.*/
匹配上面同一行会将MATCH设为”From: “并且MATCH2设为”postmaster@localhost“.多于一个的!字符也可以被使用,后面的匹配文本将被指派给MATCH3,MATCH4等等。


注意:请记住这个特征的弊端是将吃掉大量的CPU时间 — !字符为maildrop处理引入了大量复杂性。

当这里有不止一种方式去匹配字符串时,maildrop偏爱从最初尽可能多地匹配。例如:/^To:.*,!.*/
当匹配
To: joe@somewhere,bob@somewhere.else,gary@whoknowswhere
时,将MATCH设为”To: joe@somewhere,bob@somewhere.else,” 并且 MATCH2 设为”gary@whoknowswhere“.


当权重打分的时候,MATCH变量将不被设置,因为相同的模式被匹配了多次.
################################################################

===========
表达式


虽然用数字求表达式的值,但是表达式的结果被存储为一个文本字面值.当必要时,文本字面值被转换成数字,然后一个数学运算的结果被转换回一个文本字面值.

Operators
=========
操作符

下述操作符使用它们通常的含义,依照最低到最高优先级的顺序被列出来.
||
&&
<  <=  >  >=  ==  !=  lt  le  gt  ge  eq  ne
|
&
+  -
*  /
=~ /pattern/
/pattern/  !  ~  function()
Variable assignment
===================
变量赋值

 VARIABLE=expression
 

将表达式的结果赋值给VARIABLE (记住没有在变量之前放置$)

注意: 如果VARIABLE不被引号引住,那么它仅可以包括字母,数字,下划线,连字符和一些可选的其他字符.为了初始化一个名字包含非标准标点符号的变量,使用引号将变量的名字引起来.

==================================
cc - 交付一个信件的副本

 cc expression


cc 语句非常类似于 to 语句,只是一点除外:maildrop投递完信件后将会继续处理过滤文件,而不像to语句一样投递完成后立即终止maildrop.本质上,信件被复制到一个给定的邮箱,可以通过另一个cc或to语句来被再次投递到另一个邮箱.

请见to语句来获取更多的细节.当cc被用来投递一封信件到一个进程时,maildrop将EXITCODE变量设置为进程的退出码.

dotlock - create a manual dot-lock
==================================
创建一个手工的点锁

 dotlock expression {
  …
 }

当信件被投递到一个邮箱时,maildrop自动创建一个锁.maildrop将根据你的系统配置来使用点锁或者flock()系统调用.

dotlock语句创建一个显式的点锁文件.使用flock语句来创建一个显式的flock锁.

表达式是一个应被用作点锁的文件名.maildrop创建指定的点锁,执行包含在{…}块中的过滤指令,并且移除锁.表达式必须是点锁文件自身的名字.而不是你想锁住的邮箱的名字.

注意:使用手动锁有可能死锁多个maildrop进程(或者任何其他试图获取相同的锁的进程)

对点锁来说没有死锁检测是可能存在的,并且既然maildrop自动地规律性地刷新所有的点锁,他们将决不会坏死失效。你将使maildrop进程半悬在死狱中,直到他们的监控计时器关闭的同时放弃邮件投递。

echo - output diagnostic information
====================================
echo - 输出诊断信息

 echo expression

maildrop将打印给定的文本。这经常在maildrop运行在内嵌模式时使用,但是也能用作调试的目的。通常,一个新行符在文本之后被打印。如果文本以\c结束,新行符不会被打印。

exception - trap fatal errors
=============================
exception - 捕获致命错误

 exception {
    …
 }
 
异常语句捕获那些通常将导致maildrop终止的错误。如果在任何被异常语句包含的语句块里碰到一个致命错误,异常语句之后紧随的语句将被执行。

exit - terminate filtering unconditionally
==========================================

 exit

exit 语句立即终止过滤。maildrop的返回码被设为EXITCODE变量的值。通常,maildrop成功投递信件到一个邮箱后立即终止。exit语句使得maildrop不投递信件到任何地方而终止。

通常当maildrop运行在内嵌模式,当信件投递指令(译注:cc,to,xfilter?)不被允许时,exit语句被使用。

flock - create an manual flock() lock
=====================================
flock - 创建一个手动的flock()锁

 flock expression {
  …
 }

当信件被投递到一个邮箱时,maildrop自动创建一个锁.maildrop将根据你的系统配置来使用点锁或者flock()系统调用.

flock 语句创建一个手动的flock()锁.使用 dotlock 语句来创建一个手动的点锁.

表达式是一个应被锁定的文件的名字.maildrop在指定的文件上创建锁,执行包含在{…}块中的过滤指令,并且移除锁.

注意:使用手动锁有可能死锁多个maildrop进程(或者任何其他试图获取相同的锁的进程)操作系统将自动地打破flock()的死锁状态。当此情况出现时,一个maildrop进程将立即终止。为了去捕获这个异常条件,请使用异常语句,并且执行一个二者择一的过滤指令集合。

foreach - iterate over text sections matched by a pattern
=========================================================

 foreach /pattern/:options
 {
  …
 }

 foreach (expression) =~ /pattern/:options
 {
  …
 }

foreach语句为每个给定模式在给定信件内的出现 执行一个语句块。在每个迭代里,MATCH变量将被设为匹配的字符串。所有通常的选项都可以被应用到模式匹配上,除了下面这些:

 ,xxx,yyy
 在这种语境里,权重打分是无意义的。
 
 !
 模式里的!操作符不会像预期的那样工作。对每个迭代来说,只有MATCH变量将被设置。如果模式包含!操作符,语句将为了匹配字符串里的每个部份执行一次,MATCH变量也随之被设为每个部分的内容。

if - conditional execution
==========================

 if (expression)
 {
  …
 }
 else
 {
  …
 }

条件执行。如果表达式求值为逻辑真(记住-圆括号是必需的),然后,语句的第一个集合被执行。else关键字,以及下面的语句是可供选则。如果表达式出现且求值为逻辑假,else部分被执行。

maildrop 对所有的表达式作为文本字符串求值。在一个逻辑表达式的语境下,一个空字符串,或者数字0,构成了一个逻辑假的值,任何其他的情况都是逻辑真值。

如果if部分,或者else部分仅包括一个语句,括号可以忽略。

注意:这个if语句的文法比通常的更严格。如果你从maildrop得到了令人困惑的语法错误,保证括号和if语句,出现在不同的行上。特别的:闭括号,和else语句,必须在本行行末(允许注释),并且在其间不能有任何空行。

import - access original environment variable
=============================================
import - 访问原始环境变量

 import variable

当maildrop开始时,它通常导入环境变量的内容,并且将他们赋值给maildrop的内部变量。比如,如果有一个环境变量FOO,内部的maildrop变量FOO将拥有环境变量的内容。从那之后,FOO将和别的变量没有什么不同,并且当maildrop运行一个外部命令时,maildrop变量的内容将为了命令被作为环境变量导入。

一定的变量,像 HOME和PATH,出于安全原因,总是重设为固定的默认值。在投递和内嵌模式下,环境一点都不被导入,并且maildrop仅随着固定的默认变量启动。

import语句当maildrop启动的时候,使用原始的环境变量初始化指定变量。例如:

 echo “PATH is $PATH”
 PATH=”/bin”
 echo “PATH is $PATH”
 import PATH
 echo “PATH is $PATH”
 exit

结果是下列输出:

 PATH is /bin:/usr/bin:/usr/local/bin
 PATH is /bin
 PATH is /home/root/bin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin

这显示了maildrop启动的时候,PATH被设为固定的默认值 /bin:/usr/bin:/usr/local/bin。但是,我们可区分这和 import语句所展示的PATH环境变量的原始内容并不相同,。

include - execute filtering instructions from another file
==========================================================

 include expression

include语句读一个文件,并且执行包含在文件中的过滤指令。注意include语句在当前过滤文件被执行的时候被处理。当maildrop读取初始过滤文件,任何在过滤指令中的语法错误将被立即报告,maildrop将随着EX_TEMPFAIL返回码而终止。任何被include语句指定的文件中的错误将不被报告,因为直到include语句被自身执行的时候这些文件才被读取。


如果指定的文件不存在,或如果在文件里有任何语法错误,maildrop报告这个错误,并且随着EX_TEMPFAIL返回码而终止。

log, logfile - log message deliveries
=====================================
log, logfile - 记录信件投递日志

 logfile expression
 log expression


maildrop的日志记录通常是关闭的。logfile语句指定了maildrop记录信件怎样被处理的文件。参数是文件的名字。如果文件存在,maildrop添加文件。

对于每个投递来说(to和cc语句,以及默认的投递),maildrop在日志文件里记录了From: 和 Subject: 头域,以及当前时间。

log语句将增加另外的日志文本到日志文件中。log语句完全就像echo语句一样工作,除了文本被写到日志文件中而不是标准输出。

 

站长资讯网
.
分页: [1] [2] [3]
TAG: maildrop 帮助手册
推荐内容最近更新人气排行
关于我们 | 友情链接 | 网址推荐 | 常用资讯 | 网站地图 | RSS | 留言