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

maildrop中文帮助手册

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

/etc/maildroprc, $HOME/.mailfilter, $HOME/.mailfilters/*, and friends…
DESCRIPTION
本手册描述了被maildrop用来过滤 E-mail消息的语言.邮件过滤指令从一个文件中被读出来.该语言是宽松构成的,基于模式匹配.该语言有一个清楚的语法和句法结构,非常类似于Perl,但重要的是要记住它并非perl,并且在某些情况下非常不同于perl.

如果过滤指令不存在,maildrop在不做任何附加处理指令的情况下把消息递送给默认邮箱,和平常的MDA没什么不同.


注意:maildrop在做任何事之前先读取和解析过滤文件,这很重要。如果出现任何错误,maildrop打印一个错误信息,结束并将退出码设置为EX_TEMPFAIL.一个适当的MTA应该将该信息重新排队以便后面再次尝试投递.运气好的话,如果错误被捕捉到并很快地被修复,大多数简单的语法错误将不会导致邮件被弹回.

################################################################

环境

maildrop使用变量去访问和操作信件.变量是引用变量的名字来访问的任意文本,比如HOME,或DEFAULT.
文本通过一个赋值声明被放置到一个变量中,例如: FILE=”IN.junk”

这个语句将文本”IN.junk”(不带引号)放置到一个名为FILE的变量中去.之后,变量的内容通过使用$符号和变量名字来被使用,例如:to $FILE
这将投递当前的信件到一个名为”IN.junk”的mailbox文件(或者一个maildir目录)中。

除非maildrop运行在投递模式下,否则maildrop在最初会从操作系统的环境变量中创建变量.每个操作系统环境变量变成一个maildrop的变量.当运行在投递模式下时,maildrop出于安全原因不导入环境变量.在所有情况下,maildrop将下列变量重置为他们的默认值:
HOME, DEFAULT, SHELL, PATH, LOCKEXT, LOCKREFRESH, LOCKSLEEP, LOCKTIMEOUT, MAILDIRQUOTA, SENDMAIL 和 LOGNAME.

当连同Courier Mail Server一起使用的maildrop版本使用时,本规则有一个例外。下述不适用于maildrop的单用版:当在投递模式下运行的时候,如果 -d 标记不被使用,或者如果它指定与运行maildrop的用户相同的用户id,下列变量会被自动从环境中导入:HOME, SHELL, LOGNAME and MAILDIRQUOTA.这些环境变量在运行maildrop之前就被Courier初始化。还有,maildrop的变量 DEFAULT的初始值被从MAILDROPDEFAULT环境变量中导入。这是因为 Courier 覆盖 DEFAULT 环境变量去存储本地邮箱地址的默认部分。请在Courier发行版查看dot-courier(5) man。 你可以通过使用import命令获取Courier的DEFAULT 值。记住,无论如何,那将会搞乱DEFAULT的旧有内容,那可能不是你所想要的。去做这个的正确方式是像这样:
SAVEDEFAULT=$DEFAULT
import DEFAULT
LOCALDEFAULT=$DEFAULT
DEFAULT=$SAVEDEFAULT

当maildrop作为一个外部命令运行时,所有的内部变量作为环境变量被导入回环境。由过滤文件造成的内部变量的改变,将被反映到被导入的环境中去。

################################################################

词法结构

大多数空白符通常被忽略。#字符引入了一个注释,一直到行末的整行都被忽略。不像其他的邮件过滤器一样,maildrop在针对信件进行任何动作之前先解析过滤文件。如果文件中有一个语法错误,maildrop显示一个错误信息,并返回EX_TEMPFAIL。这使得邮件信件保持在队列里面,并且,寄希望于使问题被纠正,而不弹回任何信件。

注意:在maildrop里面,行末是一个词法标记。为了在下一行继续一个长的语句块,结束本行的时候加上反斜杠符。

################################################################

字面文本值

maildrop 过滤语言中的字面文本值或者被单引号或者被双引号所环绕。为了在一个被单引号环绕的文本字面值中插入单引号,或者在被双引号环绕的文本字面值中插入双引号,在其前面加上反斜杠号。使用两个反斜杠字符来在字面文本值里插入一个反斜杠字符。

注意:一个反斜杠符后跟随一个反斜杠符或者一个对应的引号,仅仅是反斜杠字符被实际移除后剩下的字符在实际文本字面值中的本义。如果一个反斜杠后跟随其他任何字符,反斜杠不被移除。

一行中的多个文本字面值将被自动连接起来,哪怕他们使用了不同的引号。例如:

FOOBAR=”Foo”‘bar’
SAVEDEFAULT=$DEFAULT
import DEFAULT
LOCALDEFAULT=$DEFAULT
DEFAULT=$SAVEDEFAULT
This sets the variable FOOBAR to the text “Foobar”.
这设置了变量FOOBAR指向文本”Foobar”。

################################################################

变量替换

被双引号环绕的文本字面值的变量替换将被执行变量替换。”$”字符跟一个变量名,将被变量的内容所替换。

MAILBOX=”$HOME/Mailbox”

这设置了变量MAILBOX为 变量HOME的内容 加上”/Mailbox”,变量名必须以一个小写或大写字母或一个下划线开始。后面的所有字母,数字,和下划线被当作一个变量名,而它的内容取代$标记和变量名。访问名字包含其他字符的变量也是可能的,只要像下面这样使用括号:MAILBOX=”${HOME-WORD}/Mailbox” ,插入HOME-WORD变量的内容。如果变量不存在,空文本字面值被用来替换变量名。访问名字中不可能包含}字符的变量。

如果$字符后面不跟着一个左括号,字母或者一个下划线,$符号在文本字面值中就不会有麻烦。一个反斜杠后跟着一个$字符结果是一个文本字面值的$字符,不做任何变量替换。

在被单引号(即省略号,呼号)环绕的文本字面值里,变量替换不会进行。

################################################################

命令行参数

maildrop 使用在maildrop命令行中递增的参数来初始化指定变量:$1,$2,等等。过滤文件可以像使用其他变量一样使用这些变量。

预定义变量

下列变量被maildrop自动定义。下列变量的默认值可以被系统管理员改变。出于安全原因,下列变量的值总是被重设为他们的默认值,并且决不从环境中导入。

default
投递信件到的默认邮箱。如果过滤文件没有指明投递该信件到哪个邮箱,将被投递到这个邮箱。默认邮箱被定义为系统管理员。

FROM
信封发件人。这个一般和出现在From:头里的地址相同,但也可能不是。这个信息对于你系统上的maildrop可能可用也可能不可用。信件信封发件人一般通过maildrop的-f选项被指定。如果-f选项没有被给出,maildrop在信件里寻找From_行。作为最后的办法,From默认为调用maildrop的用户id。记住From可能是空的-对于弹回的邮件来说,邮件信封发件人就是空的。

HOME
运行maildrop的HOME用户目录

HOSTNAME
运行maildrop的机器的网络名,从gethostname(3)中获得的。

LOCKEXT
dot-lock文件的扩展名(默认: .lock)

LOCKREFRESH
点锁以秒计的刷新间隔(默认:15)。当maildrop 锁住一个邮箱后,maildrop为了防止别的程序移走失效的点锁,尝试周期性地刷新点锁。如果一个点锁存在了一段无论如何理应放弃的时间后,这只是必需的。

LOCKSLEEP
如果一个点锁文件已存在,等待再次尝试创建一个点锁文件的秒数(默认:5)。

LOCKTIMEOUT
移除一个失效的点锁文件前等待的秒数(默认:60)。如果一个点锁文件在 LOCKTIMEOUT 秒后仍然存在,maildrop假设持有锁的进程已不存在,点锁文件可以被安全地移除。移除点锁文件后,为了避免和别的进程产生竞争条件,maildrop 在尝试创建它自己的点锁文件之前等待LOCKSLEEP秒,——这些进程同一时刻也正在尝试着移除相同的失效点锁。

LOGNAME
信件讲被投递给的用户的名字。

MAILFILTER
被传给maildrop命令行的原始过滤文件的名字。这通常对 -frgsuly 过滤文件来说有用,允许他们获取在命令行上指定的-M选项的值。

PATH
命令执行路径。maildrop将其重设为系统默认(一般是 /bin:/usr/bin/:/usr/local/bin )

SENDMAIL
邮件投递代理。当maildrop被指示将邮件交付给一个名字以!字符起始的邮箱时,这被翻译为一个转寄信件的请求。SENDMAIL 命令被执行来转寄信件。

SHELL
登录shell。shell被用来执行所有被maildrop调用的命令。

VERBOSE
当前debug层(默认 0)。设置VERBOSE 为一个递增更大的值,介于1到9,在标准错误上产生一个调试输出。maildrop在 投递模式下忽略VERBOSE变量(为了不去弄乱邮件传送代理MTA)。

UMASK
以十进制的文件创建掩码。默认的077设置创建的仅拥有者可读可写的邮箱。使用007创建用户和同组可读可写的邮箱。使用037创建用户和同组都可读的邮箱,但是只有用户可写。已存在的邮箱权限不被改变,该设置仅作用于新邮箱。当投递到maildir时,该设置仅设定新邮件的权限。maildir里信件的访问权限也被maildir目录的权限所影响。

################################################################
其他特殊变量

下列变量当过滤文件被处理时,被maildrop自动使用。

EXITCODE
maildrop的返回值。当maildrop成功地投递一个信息后,它带着一个结束码终止,这个结束码默认为0。当to或cc命令被用来投递信息到一个外部进程的时候,通过pipe管道,maildrop将设置该变量为一个外部进程的退出码。因为maildrop完成to命令后立即终止,这就意味着maildrop的退出码就是外部进程的退出码。如果to命令不是把信件投递给一个进程,你必须在to命令前设置EXITCODE,既然maildrop结束了投递之后立即终止。

LINES
当前信件的行数。注意这可能是个大概值。它可能也可能不把-A选项或者任何mbox “From” 行算进去。为了过滤,使用这个作为标准而已.

MAILDIRQUOTA
为了手动地在任何信件投递的maildir上强制一个最大大小,设置这个变量。这是个必须被系统管理员启用的可选项,请见maildirquota(8)来获取更多的信息。

RETURNCODE
当maildrop运行xfilter命令或者一个由一对反点号字符指定的命令时,该变量被设置。RETURNCODE变量在命令结束后将被设为命令的退出码。

SIZE
信件的比特数。这可能也可能不包括-A选项,以及mbox From_行。为了过滤,使用这个作为标准而已

################################################################
未引号引用的文本

所有过滤文件中的文本字符串应该在单引号或者双引号内。可是,为了方便的缘故,引号在一定的情况下可以被忽略。
仅包括字母,数字和这些字符: _-.:/${}@ 的文本可不带引号而出现。注意,这不允许空格反斜杠介入,无论如何,文本仍然可以变量替换,并且替换文本可以包含其他字符。

还有,记住模式(下面提到)以斜杠字符开始。一般来说,任何以斜杠开始的东西都被解释成一个模式。但是,”VARIABLE=”后面紧随的文本被解释成字符串即使它以斜杠开始。这就是为什么一些像这样:MAILDIR=/var/spool/mail 会符合预期地工作。但是使用引号是被高度推荐的。你必须使用引号去设置一个变量为一个长斜杠,因为一个不被引住的斜杠被解释为一个除号。

################################################################
命令替换

被反点号`包住的文本被解释成一个shell命令.shell命令被maildrop作为一个子进程执行,它的输出被用来取代该命令.例如:DIR=`ls`将当前目录下的文件名字放入DIR变量.

命令的输出的新行字符 将被空格所取代,头尾空格将被去掉(虽然多个空格并不被移除).还有,被投递的信件的内容对于命令的标准输入来说将变得可用.

################################################################
模式

maildrop的模式语法和grep命令的语法是类似的,只有一些小小不同.一个模式在过滤文件中使用下述的格式: /pattern/:options 模式指定了在信件里要去寻找的文本.如果你必须搜索以空格开头的文本,请使用诸如 “/[ ] … /” 这样的格式,因为对模式而言,起始的斜杠字符将被解释为一个除号.

一个精确匹配被寻找时,下列字符有异常.下列的特殊字符被用来指定复杂模式.如果有必要在信件中去寻找下列字符中的一个,请逐字地在其之前放置一个反斜杠.(例子中的”x”和”abc”表示一个任意字符,或者一个也可以包括其他特殊字符的模式.)

x*
寻找0个或更多个单字符x的出现.

(abc)*
寻找0个或更多个 abc 的出现.

x+
寻找至少一个或更多个单字符x的出现.

(abc)+
寻找至少一次或更多次的 abc 的出现.

x?
寻找单字符x的0或1次的出现.

.
句点匹配除了新行符的任何字符.(这也适用于集合,见下)

(abc)?
寻找0或1次的 abc 的出现.

abc!def
感叹号被用来分隔被匹配的部分.请见下述的”模式匹配结果”一节.

[abc]
指定一个字符集合 — 上述匹配一个或者a或者b或者c或者所有括弧里列出的字符.
一个或多个字符可以被列出来.比如,[~=+]匹配或者一个 拉丁语发音符~,一个等号=,或者一个加号+.这完全等价于(~|=|+),但是和一个大清单比起来,这个更短.
另外,[a-b]匹配介于a和b之间的任何字符,包括自身.比如:[0-9]匹配一个数字,[0-9A-Za-z_] 匹配数字、字母或下划线。要在集合中包括连字号-,左括号或右括号字符,在他们前面加上反斜杠。使用两个反斜杠则包含了反斜杠自身。(不同的是,历史上包括这些特殊字符的方式是被允许的,但是不被鼓励使用)

[^abc]
指定一个不是给定字符的字符集合。如果集合以^符号开始,它匹配一个不是列出字符的单字符。

\x

当”x”是一个字符时,指定x必须精确匹配。为了逐字地匹配任何指定字符(例如,你想去匹配星号*)你必须在前面加一个反斜杠字符。使用两个反斜杠字符是为了匹配反斜杠。还有,这里有几个保留的匹配控制字符,没必要在模式中逐字地介入它们。请见下面的信息。

\nnn

指定一个十进制的字符,”nnn”是一个十进制数字。

下述的简化符号能够被用来指定一些普通的集合。注意,maildrop总是使用 “C” locale。
[:alnum:]
一个文字数字式字符,等于[0-9A-Za-z].
[:alpha:]
一个大小写字母,等于[A-Za-z].
[:cntrl:]
A control character.
一个控制字符。
[:digit:]
一个数字,等于[0-9].
[:graph:]
一个图形字符(一个不是空格的非控制字符)
[:lower:]
一个小写字母,等于[a-z].
[:print:]
一个可打印字符(非控制字符)
[:punct:]
一个标点符号字符。
[:space:]
任何空白字符
[:upper:]
一个大写字母,等于[A-Z].
[:wbreak:]
任何非字母,数字,或者下划线的字符,等于[^a-zA-Z0-9_].
[:xdigit:]
一个十六进制数字,等于[0-9A-Fa-f].

要匹配任何指定字符,就在它前面放置一个反斜杠。比如,\?匹配问号。要匹配一个反斜杠,使用\\ 。

正常情况下,模式能够在信件的信头和信体的任何地方被发现(见下)。尽管如此,在模式的开始放置字符^迫使模式仅去匹配行首。在模式结尾放置$字符迫使模式仅匹配行尾。

在模式的其他地方,$符号被用来变量替换(见上)。要在模式里包含$字符,前面加上反斜杠。

################################################################

其他的反斜杠转义

当被用作模式说明时,下述的反斜杠字符被解释如下。

\n
匹配新行符。记住,这仅在w选项被指定时生效,因为若没有这个选项,maildrop将不识别多行模式。
\r

匹配一个回车符。记住,maildrop在行末自动地忽略回车符。我不知道为什么你会去使用/r,但是若你需要的话它就在那。
\t
匹配一个tab。
\f
匹配一个换页符。
\v
匹配一个纵向tab。


在行末使用一个单独的反斜杠字符,长的双引号或单引号文本可以被打断跨过多行。像这样:
TEXT=”This is a long \
?text string”
新行上的反斜杠,新行符,和所有的起始的空格均被移除,结果是”This is a long text string”.

################################################################
模式选项

/pattern/之后,经常是一个可选的冒号,跟随一个或多个选项.下述的选项可以以任何顺序被指定.

h

在信头中匹配这个模式.
b

在信体中匹配这个模式.
w

在信头和/或信体中匹配这个模式.
D

这是一个大小写敏感的匹配.通常模式匹配或者是大写或者小写文本./john/将会匹配”John”, “john”, 或 “JOHN”.
指定D选项作为一个大小写敏感的搜索:模式中的小写字符必须匹配信件中的小写字符;大写字符一样。

请注意 ‘b’和’w‘选项将会花费过多的CPU时间,可能的话应该尽量避免。
提示:如果可能,使用SIZE变量来避免用这些标记来对一个大邮件使用模式。

如果’h‘或’b‘都不被指定,模式仅去匹配信头。指定’b‘选项时的模式去匹配信体。两个都指定使得模式去匹配整个信件。

通常,信件的每一行独立地进行模式匹配,当应用模式到信头上时,在模式应用之前,多行信头(信头被分成几行,每一个继续的行以空格开头)被悄悄地组合成一行。指定’w‘标记使得模式被应用到被搜索的信件的整个部分([译注:指定信件的哪部分]这是通过h和b标记的出现与否来指定的)。还有,如果’w‘被适用,但是’h‘和’b‘标记都没使用,’b‘标记被默认指定,而不再是’h‘标记被默认指定了。

该标记也改变了^和$在模式里被解释的方式。通常,这些字符在每行的行首或行末锚定模式。当’w‘标记被指定时,^和$锚定或者信头或者信体或者两者均有的开始和末尾。

################################################################

 

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