Linux作邮件服务器操作(4)

3.sendmail的别名文件 

 sendmail依靠许多辅助文件来执行它的工作。最重要的文件是别名文件和配置文件Sendmail.cf。如果打算把sendmail作为SMTP服务程序运行(大多数站点都这么做),则应该安装SMTP的帮助文件sendmail.hf。这就是关于文件sendmail.st和sendmail.hf所需说明的内容。其他辅助文件包含在sendmail的安装和操作指南(Sendmail Internet and Operating Guide,简称SIOG)中。 

sendmail会检查收件人的地址是否为别名。例如,大部分Internet站点都设有一管理员地址Webmaster,遇到问题可以向他报告。然而大多数站点并没有这一名字的实际账号,而是把Webmaster的邮件转移到负责邮件管理的一个或几个人。例如,在假设的站点somedomain.gov上,用户zhang和li共同负责网站管理,因此别名文件会具有下面一项内容: 

Webmaster:zhang,li 

这行代码告诉sendmail,寄向Webmaster的邮件将被改寄到用户名为zhang和li处。事实上,这些名字还可以是别名,例如:  
Webmaster:firstgroup,secondgroup,thirdgroup 
firstgroup:zhang,li 
secondgroup:liu,deng 
thirdgroup:qiu,wang 

在所有这些例子中,别名的名字在冒号的左边,这些名字所代替的真实名字在冒号的右边。sendmail将反复地分析别名直到他们被解析为一个真正的用户或一个远程地址为止。在前面的例子中,要解析别名Webrmaster,sendmail首先把它扩展为收件人名单firstgroup、secondgroup和thirdgroup。然后进一步扩展这些别名中的每一个,从而得到最终的名单——zhang、li、liu、deng、qiu和wang。 

需要指出的是,别名的右边可以指定为一个远程主机,但左边却不能。别名zhang:zhang@otherdomain.com是合法的,而zhang@otherdomain.gov@otherdomain.com是不合法的。 

别名可用于创建邮递列表(mailing list)。在上面的例子中,别名Webmaster实际上就是一个本地邮件管理员的邮递列表。对于大型的或是经常改动的名单,可以利用:include的别名形式指示sendmail从文件中来读取名单的成员。如果别名文件包含行 

friends::include:/home/zhang/friends.aliases 

并且文件/home/zhang/friends.aliases包含 
zhang 
li 
liu 
deng 

其效果与下面的别名相同:  friends:zhang,li,liu,deng 

这一指令对于经常变动的邮递列表或哪些由用户而非邮件管理员管理的邮递列表非常方便。如果经常要求改变邮件别名,用户一般希望把它置于自己的控制之下。 

别名文件也可被用于向某个程序发送邮件的内容。例如,许多邮递列表的设立使用户可以获取所列的信息或通过向某一特定地址list-request发送信件来订阅信息。这种信件的主体通常只包含一个单词,比如help或subscribe等。假设zhang的邮递列表具有名为zhang-request的一个地址:  zhang-request:|/usr/local/lib/auto-zhang-reply 

上面表达式的管道号(|)通知sendmail使用程序的邮件发送器,它通常被定义为/bin/sh。sendmail将把信息提供给/usr/local/lib/auto-zhag-reply的标准输入,如果它存在,sendmail便考虑投递信件。 

用户还可以创建一个使sendmail向文件发送邮件的别名。下面是别名nobody的一个例子,它在运行NFS的系统上是经常用到:  nobody:/dev/null 

指定文件的别名让sendmail把它的消息追加到被指定的文件中。由于这一特殊的文件/dev/null是Linux/UNIX的“黑洞”,因此这一别名的作用其实是把邮件清除掉。

4.配置sendmail 

sendmail是通过sendmail.cf文件来配置的。这个文件通常在目录/etc下面(有些系统是在/etc/lib目录下)。sendmail.cf文件使用的语法与其他配置文件不同,而且比较复杂。    配置文件的每一行都以一个单一的命令字符开头,这一字符用来说明这一行的功能和语法。以#开始的行是注释行;空行被忽略;以空格或制表符开始的行是上一行的续行,不过通常应该尽量避免续行。 

下面介绍命令字符及它们的功能。  

以下为引用的内容:
    (1)#  注释符,以#开始的行是注释行。例如: 
          # This file is a sample for sendmail.cf 
    (2)D  使用格式为:DX string。其功能是把宏X定义为字符串string,例如: 
            DM mail.somedomain.gov 
    (3)C  使用格式为:CX word1、word2。其功能是把类X定义为wor1、word2。例如: 
          Cw localhost my_host 
    (4)F  使用格式为:FX/file。其功能是把类X定义为从文件中读取的值。例如: 
          Fw/etc/hosts 
    (5)H  使用格式为:H?mailerflag?name:template。其功能是定义邮件头。例如: 
          H?F?From: $ q    
    (6)O  使用格式为:OX option arguments。其功能是设置选X,例如: 
          OL8# sets the log level to 8 
    (7)P  使用格式为:Pclass=n。其功能是根据邮件的类来设置邮件投递的优先级。例如: 
          Pjunk=100 
    (8)V  使用格式为:Vn。其功能是把配置文件的版本级别通知给V8 sendmail。例如: 
          V3 
    (9)K  使用格式为:Kname class arguments。其功能是定义一个关键字文件(数据库映像)。例如: 
          Kuucphosts dbm/etc/uuphosts 
    (10)M  使用格式为:Mname,f1=v1,...。其功能是定义一个邮件发送器。例如: 
          Mpop,P=/bin/sh,F=lsD,A=sh-c $ u 
    (11)S  使用格式为:Sun。其功能是开始一个新的规则集。例如: 
            S22 
    (12)R  使用格式为:Rlhs rhs comment。其功能是定义一个匹配/改写规则。例如: 
        R $ + $>jg call ruleset jg