Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->系统管理 ->正文

Sendmail第九章 规则集0

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]

9. 规则集0

  规则集0是用来为一个专门的接收地址选择邮件分发代理。在图9-1中显示了规则集0与其它规则集之间的关系。

sendmail-9-1

  图9-1 规则集0

  对于邮件消息的每一个接收者都将调用一次规则集0。对于每一个地址规则集0将做三次决定。这三次分别处理:邮件分发代理的符号名,邮件地址中的用户名,邮件地址中的主机名。我们在本章以及后的关于规则集的章节中都会展开说明。

9.1 引入规则集0

  记得我们曾经在第6章“邮件中枢与分发代理”,设计过一个client.cf文件,使得sendmail将所有的邮件都转发给了邮件中枢来处理。当时我们在client.cf文件中做了以下声明:


# Delivery agent definition to forward mail to hub
Mhub, P=[IPC], S=0, R=0,F=mDFMuXa,T=DNS/RFC822/SMTP,A=IPC $h

  在这种情况下,我们就无需设计任何重写接收者地址的规则,我们只需简单地将信发给邮件中枢就可以了。

  以下就是一个规则集的实例:


  S0
  R$+   $#hub  $@${REMOTE} $:$1  forward to hub

  第一行(S0)说明规则集0定义开始。你已经在上一章中看到过这样的LHS,$+是一个通配符,它能够与任何一个地址匹配,当然如果是空地址就无法匹配了。

9.2 RHS的三个部分

  规则集0的任务是负责将每一个地址解析成为三个部分:分发代理的符号名,主机的名字,在那台主机上的用户名。(如图9-2)所示。

sendmail-9-2

  图9-2 规则集0的工作

  大家应该还能记得“规则”就象是一个条件语句,如果LHS与工作区的内容匹配,那么sendmail就会执行RHS中的内容。

  在规则“R$+ $#hub $@${REMOTE} $:$1”中,RHS将解析这三个部分:


$#hub 分发代理
$@${REMOTE} 主机名
$:$1 用户名

  一些转换的通配符的含义如下表所示:

  表9-1 规则集0转换符


 转换符   说明
  $#    邮件分发代理
  $@    主机名部分
  $:    用户名部分

9.2.1 分发代理($#)

  第一个部分是分发代理的名字,在$#后面跟着的就是分发代理名。在RHS中$#符号告诉sendmail后面跟着的就是分发代理的用户名。

  我们在client.cf文件中定义了符号名hub:


# Delivery agent definition to forward mail to hub
Mhub, P=[IPC], S=0, R=0, F=mDFMuXa,T=DNS/RFC822/SMTP,A=IPC $h

  当RHS拷贝到工作区时,首先将$#符号拷贝到工作区,然后拷贝分发代理的符号名,并且将它进行标记化。由于hub中并没有任何分隔符,所以最终拷贝到工作区的内容就是:

$#  hub

9.2.2 主机名($@)

  第二个部分就是主机名。转换符$@告诉Sendmail,后面的内容就是邮件将要发送到的主机。如果在RHS中遇到类似“${name}”的表示式,则意味着我们使用了宏。在这个例子中,我们使用了${REMOTE},这个宏在client.cf文件中有以下定义

D{REMOTE}mailhost

  这样,最终

$@${REMOTE}

  被拷贝到工作区后,就成为了:

$@ mailhost

9.2.3 用户名($:)

  第三个部分就是用户名,RHS中的转换符$:意味后面跟着的是邮件接收者的用户名。它告诉sendmail后面跟的是用户名。在我们的例子中,使用的是$1。

  那么这个$1是什么呢?请看下图:


$+ . $+
 |   |
$1  $2

  也就是说在第一个“.”之前的部分就是$1,而之后的就是$2。

9.3 测试规则集0

  为了使大家能够观察到实际的运行结果,我们花一些时间来做一些测试。首先我们在你的client.cf文件中加入规则集0:


  S0
  R$+   $#hub  $@${REMOTE} $:$1 forward to hub

  现在,我们以规则测试模式运行sendmail,然后输入地址boss@acme:


  % ./sendmail –Cclient.cf –bt
  ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
  Enter <ruleset><address>
  > 0 boss@acme
  rewrite: ruleset 0  input: boss@acme
  rewrite: ruleset 0 returns:$# hub $@ mailhost $: boss@acme


 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:Sendmail第八章:规则   下一篇:Qmail+MH(上)

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章