20.7. SMTP 与 UUCP

sendmail的配置,在FreeBSD中已经配置好为你的站点直接的连接Internet. 如果站点希望他们的邮件通过UUCP交换,则必须安装其它的sendmail配置文件.

手工的配置/etc/mail/sendmail.cf是一个高级主题 . sendmail8版本通过m4(1) 预处理生成一个配置文件, 实际上这个配置发生在一个比较高的抽象层. m4(1) 配置文件可以在 /usr/src/usr.sbin/sendmail/cf下被找到.

如果你没有在系统上安装全部源码, 则可以从单独的压缩文件中提取sendmail配置文件。假定你的FreeBSD源码CDROM已经被mount:

# cd /cdrom/src # cat scontrib.?? | tar xzf - -C /usr/src/contrib/sendmail

这个提取只有几百K字节. cf目录中的README文件能够为你提供一个到m4(1)配置的基本的介绍.

最好的支持UUCP传送的方法是使用 mailertable的特点. 建立一个资料库让 sendmail可以使用它自己的路由决策.

首先, 你必须建立你自己的.mc文件. /usr/src/usr.sbin/sendmail/cf/cf目录包含一些例子 . 假定你已经命名自己的文件叫做 foo.mc, 你要做的只是把它转换成一个有效的 sendmail.cf:

# cd /usr/src/usr.sbin/sendmail/cf/cf
# make foo.cf # cp foo.cf /etc/mail/sendmail.cf

一个典型的.mc文件看起来可能象这样:

VERSIONID(`Your version number') OSTYPE(bsd4.4)

FEATURE(accept_unresolvable_domains)
FEATURE(nocanonify)
FEATURE(mailertable, `hash -o /etc/mail/mailertable')

define(`UUCP_RELAY', your.uucp.relay)
define(`UUCP_MAX_SIZE', 200000)
define(`confDONT_PROBE_INTERFACES')

MAILER(local)
MAILER(smtp)
MAILER(uucp)

Cw    your.alias.host.name
Cw    youruucpnodename.UUCP

accept_unresolvable_domains, nocanonify, 和 confDONT_PROBE_INTERFACES特性将避免在传送邮件时使用DNS的机会. The UUCP_RELAY项是支持UUCP传送所必须的. 简单的放入一个Internet上可以处理UUCP虚拟域地址的主机名; 通常, 你在这里填入你 ISP邮件的回复处.

一旦你做完这些,你还需要这个 /etc/mail/mailertable 文件. 如果你只有一个用来传递所有邮件的对外通道的话,以下的文件就足够了:

#
# makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable
.                             uucp-dom:your.uucp.relay

一个更复杂点的例子象这样:

#
# makemap hash /etc/mail/mailertable.db < /etc/mail/mailertable #
horus.interface-business.de   uucp-dom:horus
.interface-business.de        uucp-dom:if-bus
interface-business.de         uucp-dom:if-bus
.heep.sax.de                  smtp8:%1
horus.UUCP                    uucp-dom:horus
if-bus.UUCP                   uucp-dom:if-bus
.                             uucp-dom:

头三行处理域地址邮件,不应该被传送出默认的路由 , 而由某些UUCP邻居取代的特殊情况,这是为了走 ``捷径'' . 下一行处理本地网的邮件让它可以使用 SMTP来传送. 最后, UUCP邻居提起.UUCP虚拟域的记载 , 允许一个uucp-neighbor !recipient 推翻默认规则. 最后一行则以一个单独的句点最为结束 , 以UUCP传送到提供你所有的邮件网关的UUCP邻居 . 所有在 uucp-dom:关键字里的节点名称必须是有效的UUCP邻居,你可以用uuname去确认.

提醒你这个文件在使用前必须被转换成DBM数据库文件. 最好在mailertable最上面用注解写出命令行来完成这个工作.当你每次更换你的mailertable后你总是需要执行这个命令.

最后提示: 如果你不确定某个特定的路径可用 , 记得把-bt 选项加到sendmail. 这会将sendmail启动在地址检测模式; 只要按下3,0, 接着输入你希望测试的邮件路径位置. 最后一行告诉你使用邮件代理程序,代理程序会通知目的主机以及(可能转换)地址. 要离开此模式请按Ctrl+D.

% sendmail -bt ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address> > 3,0 foo@example.com
canonify           input: foo @ example . com
...
parse            returns: $# uucp-dom $@ your.uucp.relay $: foo < @ example . com . >
> ^D