第十四章 配置和运行smail
这一章将给你一个设置smail的快速入门,以及它所提供的功能概述。尽管smail的行为在很
大程度上与sendmail相兼容,但是它们的配置文件却是完全不同的。
主要的配置文件是/usr/lib/smail/config。你一定要编辑这个文件以反映你的站点的特定的
值。如果你只是一个UUCP的末端站点(leaf site),那么相应地你很少需要改动的。配置路
由选择和传输选项的其它文件当然也可以使用;这些文件也将概要地论及。
缺省地,smail会立刻处理并分发所有入站的邮件。如果你有相应较大的流量,你可以先让s
mail将信息收集到所谓的队列(queue)中,并且仅在一定的间隔期间来处理它们。
当在TCP/IP网络上处理邮件时,smail会以后台模式(daemon mode)频繁地运行:在系统引
导启动时,它是从rc.inet2被调用的,并且将自己置入后台以等待SMTP端口(通常是端口25
)进入的TCP连接。当你可能会遇上较大信息流量时,这是非常有用的,因为smail不会针对
每个入站连接而立即运行的。另外一种方法是让inetd来管理SMTP端口,并且每当这个端口有
连接时,由它来调用smail。
smail有许多标志以控制自己的行为;在此详细讨论它们对你并不会有太大的帮助。幸运的是
,smail支持一些标准的操作模式,当你通过一特定的命令名调用smail时这些模式会开启,
如rmail和smtpd。通常,这些别名本身是对smail执行文件的符号连接。在讨论smail的各种
特性时我们会遇到其中大多数特性。
在所有环境下,你应该有两个到smail的连接;它们是/usr/bin/rmail和/usr/sbin/sendmai
l。[1] 当你使用一个用户代理程序(如elm)撰写和发送一个邮件信息时,该邮件信息将输
送给rmail去进行投递,而接收者列表要在命令行上给出。对于通过UUCP接收的邮件也会有同
样的情况。然而,elm的某些版本会调用/usr/sbin/sendmail而不是rmail,所以你需要它们
两者。例如,如果你将smail放在/usr/local/bin中,那么在shell提示下键入下面两行:
# ln ?s /usr/local/bin/smail /usr/bin/rmail
# ln ?s /usr/local/bin/smail /usr/sbin/sendmail
如果你想更深入地研究配置smail的细节,请参阅手册页smail(1)和smail(5)。如果它没有包
括在你中意的Linux发行版本中,你可以从smail的源程序中得到。
14.1 UUCP的设置
要想在只有UUCP的环境下使用smail,基本的安装过程是非常简单的。首先,你必须确信你已
经有了上面所提到的两个符号连接rmail和sendmail。如果你还希望从其它站点接收到SMTP批
处理信息,你也需要设定rsmtp为一个到smail的连接。
在Vince Skahan的smail发行版中,你会找到一个样本配置文件。它被命名为config.sample
并存在于/usr/lib/smail中。你必须拷贝它到config并且编辑它以适用于你的站点。
假设你的站点名称是swim.twobirds.com,并在UUCP映射中以swim登记注册。你的灵敏主机是
ulysses。此时你的config文件应该看上去象这样的:
#
# Our domain names
visible_domain=two.birds:uucp
# Our name on outgoing mails
visible_name=swim.twobirds.com
#
# Use this as uucp-name as well
uucp_name=swim.twobirds.com
#
# Our smarthost
smart_host=ulysses
第一条语句告知smail有关你的站点所属的域。在这里插入它们的名字并用冒号分开。如果你
的站点名在UUCP映射中注册过,那么你也应该加上uucp。在处理一个邮件消息时,smail使用
hostname(2)系统调用来确定你的主机的名字,并且将接收者的地址和这个主机名作比较检查
,依次添加上这个列表中的所有名字。如果该地址与这些名字或非正规主机名中的任何一个
相匹配时,接收者就被认为是本地的,并且smail将试图将这个消息投递给本地主机上的一个
用户或别名。否则的话,接收者被认为是远程的,并开始尝试投递到目的主机去。
visible_name应该含有单个、用于出站邮件上的你的站点的全资域名。当在所有出站邮件上
生成发送者的地址时,将使用这个名字。你必须确信使用了一个smail能够识别为代表本地主
机的名字(也即,列于visible_domain属性中域之一的主机名)。否则的话,对你的邮件作
出的回复将弹出你的站点。
最后一条语句设置用于灵敏主机路由选择的路径(已在13.4节中作了描述)。对于这个样本
设置,smail会把所有到远程地址的邮件转发给灵敏主机。由于消息将通过UUCP来投递,该属
性必须指定一个你的UUCP软件认识的系统。请参阅第12章的让站点为UUCP知晓。
还有一个上面文件中用到的选项我们至今还没给出解释;这就是uucp_name。使用这个选项的
理由是:默认地,smail使用hostname(2)返回的值给UUCP方面使用,比如在From_标题行中给
出的返回路径。如果你的主机名没有在UUCP映射计划组注册过,你应该告诉smail另外使用你
的全资域名取代之。[2] 这可以在config文件中加入uucp_name选项来做到。
在/usr/lib/smail中还有一个文件,叫paths.sample。它是paths文件的一个例子。然而,除
非你有到多于一个站点的邮件连接,否则的话你并不需要它。如果你确实有多个邮件连接,
你就需要自己写一个这个文件,或者从Usenet映射中生成一个。paths文件将在本章稍后讨论
。
14.2 为局域网(LAN)进行设置
如果你正运行一个站点,具有两台或以上的主机构成了一个LAN,那么你就必须指定一台主机
来处理你的UUCP与外部世界的连接。在你的LAN上的主机之间,你很可能会用SMTP在TCP/IP上
交换邮件。假设我们现在再次回到虚拟酿酒厂,而且vstout被设置成为UUCP的网关。
在一个连网的环境中,最好将所有用户的邮件箱放在单个文件系统上,这个文件系统在所有
其它主机上可以以NFS加载的。这允许用户从一台机器换到另一台机器,而不需要将他们的邮
件带来带去(或者更糟的是,每天早晨检查三四台机器看看有没有新到的邮件)。因此你也
希望发信者的地址是与编写邮件的机器无关的。在发信者的地址中一直使用域名而非主机名
,就是一个非常实际有用的方法。例如,Janet用户将指定地址为janet@vbrew.com而不是ja
net@vale.vbrew.com。下面我们将解释如何让服务器将域名识别为一个你的站点的有效名字
。
将所有邮件箱保持在一台中央主机上的另一种不同的方法是使用POP或者IMAP。POP代表邮局
协议(Post Office Protocol)它能让用户通过一简单TCP/IP连接访问他们的邮件箱。IMAP
,交互式邮件访问协议(Interactive Mail Access Protocol),与POP类似,但更通用。I
MAP和POP的客户以及服务器程序都已经移植到Linux上,可以从sunsite.unc.edu中的/pub/L
inux/system/Network下取得。
14.2.1 编写配置文件
酿酒厂的配置是按如下方式工作的:除了邮件服务器vstout本身的所有主机使用灵敏主机路
由选择将所有出站邮件传递给服务器。vstout本身则将所有出站邮件发送给用以传递所有酿
酒厂邮件的真正灵敏主机;这个主机叫作moria。
除了vstout,所有其它主机的标准config文件看上去象这样:
#
# Our domain:
visible_domain=vbrew.com
#
# Whaat we name ourselves
visible_name=vbrew.com
#
# Smart-host routing: via SMTP to vstout
smart_path=vstout
smart_transport=smtp
这同我们用于UUCP站点的非常相似。主要的不同之处是用于发送邮件到灵敏主机的传输是SM
TP。visible_domain属性使得smail在所有出站邮件上使用域名来代替本地主机名。
在UUCP邮件网关vstout上,config文件看上去稍有不同:
#
# Our hostnames:
hostnames=vbrew.com:vstout.vbrew.com:vstout
#
# What we name ourselevs
visible_name=vbrew.com
#
# in the uucp world, we’re known as vbrew.com
uucp_name=vbrew.com
#
# Smart transport: via uucp to moria
smart_path=moria
smart_transport=uux
#
# we’re authoritative for our domain
auth_domains=vbrew.com
这个config文件使用了一个不同的方案来告诉smail本地主机叫什么。不是给它一个域列表并
让它使用一个系统调用来找出主机名,而是明确地给出了一个列表。上面的配置本身含有全
资和自由的主机名(fully qualified and the unqulified hostname),以及域名。这使得
smail能将janet@vbrew.com识别为一个本地地址,并将消息投递给janet。
auth_domains变量命名一个域,对于这个域,vstout被认为是授权的。也即,在smail接收到
任何到地址host.vbrew.com的邮件时,如果其中的host不是任何本地机器的名字,那么它就
会拒绝这个邮件消息并将它返回给发信者。如果没有这个条目,那么任何这样的消息都将被
送到灵敏主机,而灵敏主机将把它返回给vstout,一直这样循环下去直到该消息由于超过最
大跳数而被丢弃。
14.2.2 运行smail
首先,你要决定是否将smail作为一个独立的后台程序(daemon)运行,或者是让inetd管理
SMTP端口并且仅当某些客户请求一个SMTP连接时才调用smail。通常,在邮件服务器上,你将
更喜欢后台