权重打分
模式被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]
- 上一篇:Extmail添加用户时出错
- 下一篇:postfix邮件命令大全