Sendmail第七章 宏sendmail程序将读取并分析client.cf文件。由于在这个配置文件中并没有错误,所以sendmail将不会打印错误信息。 7.3预定义宏 在sendmail中,有一些内置的宏。你已经在分发代理的定义中看到过了u(接收者的用户名)和h(接收者的主机名)。它们无须在配置文件中定义,它们是sendmail定义的。这种宏,我们称之为预定义宏。下表中列出部分预定义宏: 表7-1:一些预定义宏 宏名 描述
在运行sendmail时,只需加上-d35.9参数,就可以显示出所有宏的定义:
尽管client.cf文件如此小,但这个命令的输出惊人地长:
不同版本的sendmail的输出将不同。例如,l、o和e在V8.7以前的版本中存在,而在8.7以后的版本中就没有了。前面27行显示出了sendmail为operators(操作者,将在下一章中具体说明)预留的宏。而后面的11行则是我们现在所感兴趣的。这11行中,前10行都是senmail程序预定义的,最后1行则是用户自己定义的。 这些输出可以显示出另一个概念。一些内部宏是在读取配置文件之前定义的,你可以在client.cf文件中改变。例如我们要改为w,则只需在配置文件中加入一行:
使用了这行配置文件后,宏w的值就从here.us.edu变成了myhost.my.domain了。 注意,在以上输出中并没有显示h和u宏。这些宏,尽管在内部定义了,但它们是直到邮件发送后才被赋予实际的值的。你不能够在你的配置文件中修改它们,因为它们在配置文件被读取之后才定义的。 最后,请注意只有V8的sendmail会为宏设置适当的缺省值。所有老版本的sendmail需要你手动地在client.cf文件中设置e、l、n、o以及q的缺省值。 7.3.1 主机名 本地主机名由两部分组成。主机名部分就是机器名,不包括“.”(如here)。而域名部分则至少有由“.”隔开的两个部分(如us.edu)。而全规范名(fully qualified)则是由主机名加上“.”,然后再加上域名构成。(例如:here.us.edu)。全规范名才能唯一标识一台机器。 本地机器的主机名也需要规范化。一台机器可以有多个名字(如mailhost或printserver等等),但只能有一个是正式的。你可以执行hostname命令来获取这个正式的名字:
下面我们就来看一下sendmail是如何解释你的本地主机名。我们以-d0.1的参数来执行sendmail:
这里经常容易出错。例如,如果你并未与Internet连接,你可能就不会有一个合法的域名。或者你可能运行NIS而使得在hosts.byname映射中只有短主机名。一个很重要的事情就是观察以上输出中,sendmail是否正确地发现了你的短主机名和规范主机名:
如果这里有错误,你需要修复引起这个错误的系统问题。在系统级,调查以下问题: 1)/etc/hosts文件。你可能在这个文件中仅列出了短主机名。对于sendmail 8.7以前的版本,它需要你在这个文件的最开始一行列出全规范主机名。而从sendmail 8.7开始,新版的sendmail只需要在这个文件中存在全规范主机名就可以了。 2)nis映射。确认主机名能够被DNS查寻。 3)nsswitch.conf或svc.conf文件。确定正确的主机名查寻方法在此列出。 上一篇:Sendmail第六章:邮件中枢与分发代理 下一篇:Sendmail第八章:规则 更多相关文章
|
推荐文章
精彩文章
|