sendmail 在它的配置中使用相当复杂的规则系统。在你掌握许多配置窍门之前,通过手工写一个 sendmail.cf
文件很不常见并且耗费大量时间。如果你对此感兴趣,你可以停止阅读本文而去看 O'Reilly 的 "Bat Book" 。
取代使用手工配置的方法,我们使用 m4
宏处理器将预定义好的文件生成你的配置文件,这些预定义文件随 sendmail 的发行版本一并提供。
请看文件 sendmail.mc
的第一行:
include(/usr/lib/sendmail.cf/m4/cf.m4) VERSIONID(`sendmail.mc - roessler@guug.de') OSTYPE(debian) define(`ALIAS_FILE',`/etc/mail/aliases')
在第一行, cf.m4
被包含进来。这个 m4 宏文件包含了其它部分将用到的许多宏定义。 确定你提供的路径是正确的 -
在我们这个例子中提供的这个路径是Debian GNU/Linux的典型路径。 OSTYPE
宏被用来给出一些非常有用的当前配置的缺省值。
如果你不是使用Debian系统,你可以将这里的 "debian" 换成 "linux" 。 ALIAS_FILE
告诉 sendmail 到哪里去找到 aliases 文件。
以下几行告诉 sendmail 使用 genericstable
特点和到哪里去找到使用该特点的配置文件:
FEATURE(masquerade_envelope) FEATURE(genericstable, `hash -o /etc/mail/genericstable') GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain')
masquerade_envelope
特点告诉 sendmail 去实现邮头重写到邮件的信封 传送者。
这是一个外部邮件投递系统将用来直接投递失败报告和警告邮件的邮件地址。generics*
文件将在下面解释。
现在,我们必须定义一个所谓 smart 主机,就是将要负责为你的系统传送外部邮件的主机。 注意:这台主机有可能不是你的ISP的POP和IMAP服务器。 如果对此不太清楚,联系你的ISP供应商。 主配置文件的代码如下:
define(`SMART_HOST',`mail-out.your.provider')
请替换 mail-out.your.provider 成你的ISP的主机地址。
最后两行包含 "mailer" 定义,sendmail 根据这些定义才能知道如何处理不同类型的邮件:
MAILER(local) MAILER(smtp)
为了从这个 sendmail.mc
生成 sendmail.cf
文件,输入以下命令 (作为 root 用户):
# m4 sendmail.mc > _sendmail.cf # mv -f _sendmail.cf sendmail.cf
注意我们使用的技术:将 m4
的输出写入一个临时文件,再转移到合适的地方。这将帮助我们避免sendmail读入只写了一部分的配置文件。
首先,我们必须告诉sendmail哪些地址将被认为是本地地址(然后将被重写)。这很简单:只要将你的机器的完整主机名放入文件 /etc/mail/genericsdomain
。
为了取得你的机器的完整主机名,输入以下命令:
$ hostname -f
现在,让我们看一下重写表:
/etc/mail/genericstable
。这个文件由被空格分开的两列组成。第一列包含本地地址,第二列包含替换后的邮件地址。
文件看起来如下:
harry harryx@your.isp maude maudey@her.isp root fredx@your.isp news fredx@your.isp
注意每一个本地机器上的账号都要有一行,这样自动生成的外发邮件能带上正确的头信息。
为了性能的考虑, sendmail 并不直接使用这个文本文件,而是用“哈希”版本替代。为了生成这个版本,输入以下命令:
# makemap -r hash genericstable.db < genericstable
注意: genericstable
指定的重写规则将不 作用在本地邮件或你从外部接收到的邮件 - 这种转换只使用在从你本地机器通过你的ISP主机发往外部的邮件。
别名文件包含只对你本地邮件有效的附加本地名字。这对管理员账号象 root
非常有用,从你的系统接收自动转换来的邮件。
/etc/mail/aliases
可能如下所示:
root: fred news: root postmaster: root mail: root www: root nobody: /dev/null MAILER-DAEMON: nobody
这个例子将路由送往 root
, news
, postmaster
, mail
, 和 www
用户的本地邮件到 fred
,
而送往 nobody
和 MAILER-DAEMON
的邮件将重定向到 /dev/null
。
就象 genericstable
, aliases
可能包含许多 项。因此,就象我们上面所说的,sendmail直接使用文本文件将效率低下。
aliases
采用和 genericstable
同样的机制:生成一个哈希数据库。
取代直接使用 makemap
,这次你可以输入命令 newaliases
。它将自动处理所需的一切。