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

Sendmail第七章 宏

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

7. 宏

  在sendmail.cf文件中有一个十分重要的组成部分,就是那些使用代表文本的符号。这与bsh和csh中的变量的使用极为类似:


REMOTE=mailhost   (bsh)
set REMOTE=mailhost   (csh)
D{REMOTE}mailhost(sendmail.cf)

  以上几个语句都是定义了一个名为REMOTE的变量,被为其赋值为mailhost。

  而要使用变量中存储的值,可以使用以下表达式:


$REMOTE  (bsh)
$REMOTE  (csh)
${REMOTE}(sendmail.cf)

  也就是说,以上表达式将得到存储在变量REMOTE是值,在这个例子中就是文本字符mailhost。一经定义了REMOTE的值为mailhost,你就可以在任何地方使用以上表达式来代替文本字符mailhost。

7.1 概要

  宏能极大地简化您的工作。它允许你在一个集中的地方定义一些文本符号。而你只需修改这里的文本字符,则改变将自己传播到文件中其它部分。例如,假设我们在sendmail.cf文件中定义了:

D{REMOTE}mailhost

  如果你在sendmail.cf文件的其它地方都使用${REMOTE},则只需简单修改定义D{REMOTE}mailhost中的字符串,就将使所有表达式${REMOTE}的值改变。

  宏定义的语法格式如下:

DXtext

  必须使用字符D开始。这个字母D的后面紧跟着宏的名字(在这就是X),注意中间并没有空格隔开。接着在宏名的后面紧跟着值,注意在宏名与值之间也没有用空格隔开。这个值从宏名开始,直到本行结束。

  宏名可以由一个字符组成,也可以由多个字符组成。如果你使用多个字符做为宏名,就必须使用“{ }”把它们括起来。如果是使用单个字符做宏名,则也应该使用“{ }”包括起来,而在V8.7之前也可以不使用“{ }”。


DRmailhost (sendmail V8.7以前版本)
D{R}mailhost 
D{REMOTE}mailhost

  通常,当读取配置文件的时候就会自动展开宏。因此,你必须在使用宏之间定义它们:


D{ROLE} son
S${ROLE}(此时的值是son)
D{ROLE}mother
S${ROLE}(此时的值是mother)

  在这里,ROLE首先被赋值为son,当处理到第一个S命令时,sendmail会将${ROLE}替换为前面定义的值:son,因此得到:

Sson

  而后,配置文件又将ROLE的值修改为了为mother,所以在处理到第二个S命令时,sendmail会将${ROLE}替换为ROLE的值mother,因此得到:

Smother

  不过请注意这是一个十分不好的风格,通常,为了不产生混乱,每个宏应该只被定义一次。

7.2 定义宏

  在上一章里,我们粗略了解了分发代理hub和local本地分发代理的定义。我们可以看到,在这两个分发代理的定义中的最后一部分“A=”都使用到了宏。


V7 
# Delivery agent definition to forward mail to hub 
Mhub, P=[IPC],S=0,R=0,F=mDFMuXa,T=DNS/RFC822/SMTP, A=IPC $h
# Sendmail requires this,but we won’t use it.
Mlocal, P=/bin/mail, F=lsDFMAw5:/|@rmn, S=10, R=20/40, A=mail –d $u

  宏有两种:一种是你自己定义的,而另一种则是sendmail定义的。你自己定义的宏,宏名一定要以大写字母开始;如果宏名是以小写字母开始的,如h、u,则是sendmail定义的宏。

  你已经看到过一个以大写字母开始的宏:

D{REMOTE}mailhost

  在你的网络中,邮件中枢机器会使用了mailhost或类似的(如mailrelay)的别名,然而有时则不存在这样的别名。此时你必须使用它的实际机器名(如mail.us.edu)。现在,我们编辑client.cf,然后加入第一个宏{REMOTE}。


V7 
# Defined macros
D{REMOTE}mailhost # The name of the mail 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
# Sendmail requires this,but we won’t use it.
Mlocal, P=/bin/mail, F=lsDFMAw5:/|@rmn, S=10, R=20/40, A=mail –d $u

  在此,我们在client.cf文件中新增了三行。第一行是一个注释语句,第三行则是一个空行,有来可视地分隔开宏定义部分与分发代理定义部分。第二行是新的宏定义。正如注释中说的,这个{ROMOTE}宏将包含邮件将转发到的机器名。

  现在我们花一些时间来测试一下这个新的client.cf文件:

% ./sendmail –Cclient.cf –bt </dev/null


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



上一篇:Sendmail第六章:邮件中枢与分发代理   下一篇:Sendmail第八章:规则

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号