您可能会发现主机实际上是在另外一个域里面, 例如,如果您是在 foo.bar.edu 里,而您要找一台叫 mumble 的主机,它在 bar.edu 域里,您就必须用完整的域名 mumble.bar.edu,而不是用 mumble。
传统上,这在 BSD BIND resolvers 中是可行的。 然而目前随 FreeBSD 附带的 BIND 已不为同一域外提供缩写服务。所以,这个不完整的主机名 mumble 必须以 mumble.foo.bar.edu 这种形式才能被找到, 或者将在根域中搜索它。
这跟以前的处理是不同的,以前版本将会继续寻找 mumble.bar.edu 和 mumble.edu。 如果您想要了解这种方式是否是好,或者它有什么安全方面的漏洞, 请参阅 RFC 1535 文档。
如果您想要一个好的工作环境,您可以使用如下行:
search foo.bar.edu bar.edu替换先前旧的版本:
domain foo.bar.edu把这行放在您的 /etc/resolv.conf 文件中。然而,请一定要确定这样的搜寻顺序不会造成 RFC 1535 里提到的“boundary between local and public administration” 问题。
下面是 sendmail FAQ 中的回答:
我得到了如下的信息: 553 MX list for domain.net points back to relay.domain.net 554 <[email protected]>... Local configuration error 我如何解决这个问题? 您已经通过 MX 记录指定把发送给特定的域 (例如,domain.net) 的邮件被转寄到指定的主机 (在这个例子中,relay.domain.net), 而这台机器并不认为它自己是 domain.net。请把 domain.net 添加到 /etc/mail/local-host-names 文件中 [在 8.10 版之前是 /etc/sendmail.cw] (如果您使用 FEATURE(use_cw_file) 的话) 或者在 /etc/mail/sendmail.cf 中添加“Cw domain.net”。
sendmail 的 FAQ 可以在 http://www.sendmail.org/faq/ 找到, 如果您想要对您的邮件做任何的“调整”, 则推荐首先看一看它。
您想要把局域网上的 FreeBSD 主机连接到互连网上,而这台 FreeBSD 主机将会成为这个局域网的邮件网关, 这个拨号连接不必一直保持在连接状态。
最少有两种方法可以满足您的要求。一种方法就是使用 UUCP。
另一种方法是找到一个专职的服务器来为您的域提供副 MX 主机服务。 例如,如果您公司的域名是 example.com,您的互连网服务提供者把 example.net 作为您域的副 MX 服务:
example.com. MX 10 example.com. MX 20 example.net.
只有一台主机被指定当做您的最终收信主机 (在 example.com 主机的 /etc/mail/sendmail.cf 文件中添加 Cw example.com)。
当 sendmail 试图分发邮件的时候, 它会尝试通过 modem 连接到您 (example.com)。 因为您并不在线,所以总是会得到一个超时的错误。 sendmail 将会把邮件发送到副 MX 主机,也就是说,您的互连网服务提供者 (example.net)。副 MX 主机将周期性的尝试连接并发送邮件到您的主机 (example.com)。
您也许想要使用下面的这个登录脚本:
#!/bin/sh # Put me in /usr/local/bin/pppmyisp ( sleep 60 ; /usr/sbin/sendmail -q ) & /usr/sbin/ppp -direct pppmyisp
如果您想要为一个用户建立一个分开登录的脚本, 您可以使用 sendmail -qRexample.com 替换上面的脚本。这样将使所有的邮件按照您的 example.com 队列立即被处理。
更深入的方法可以参考下面这段:
这段信息是从 FreeBSD Internet 服务提供商的邮件列表 拿来的。
> 我们为用户提供副 MX 主机服务。用户每天都会上线好几次 > 并且自动把信件取回主 MX 主机 > (当有他们的邮件时我们并没有通知他们)。 > 我们的 mailqueue 程序每 30 分钟清一次邮件队列。那段时间他们 > 就必须上线 30 分钟以确保他们的信件送达他们的主 MX 主机。 > > 有任何指令可以用 sendmail 寄出所有邮件么? > 普通用户在我们的机器上当然没有 root 权限。 在 sendmail.cf 的“privacy flags”部分,有这样的设定 Opgoaway,restrictqrun 移除 restrictqrun 可以让非 root 用户启动队列处理的程序。 您可能也要重新安排您的 MX 设定。我们是用户的 MX 主机, 而且我们还设定了这个: # If we are the best MX for a host, try directly instead of generating # local config error. OwTrue 这样的话远程机器会直接把信送给您,而不会尝试连接您的用户的机器。 然后您就可以把邮件发送到您的用户。这个设定只对 “主机”有效,所以您必须要让您的用户在 DNS 中把他们的邮件主机设置为 “customer.com”或者 “hostname.customer.com”。只要为“customer.com”在 DNS 里添加一个 A 记录就可以了。
默认的 FreeBSD 安装中, sendmail 会配置为只发送来自它所在主机上的邮件。 例如,如果有可用的 POP 服务器,则用户将可以从学校、 公司或其他什么别的地方检查邮件,但他们仍然无法从远程直接发送邮件。 通常,在几次尝试之后, MAILER-DAEMON 将发出一封包含 ``5.7 Relaying Denied'' 错误信息的邮件。
有很多方法可以避免这种现象。 最直截了当的方法是把您的 ISP 的地址放到 /etc/mail/relay-domains 文件中。 完成这项工作的简单的方法是:
# echo "your.isp.example.com" > /etc/mail/relay-domains
建立或编辑这个文件以后您必须重新启动 sendmail。 如果您是一个管理员并且不希望在本地发送邮件, 或者想要在其它的机器甚至其它的 ISP 上使用一个客户端系统, 这个方法是很方便的。如果您仅有一到两个邮件帐户它也非常的有用。 如果有大量的地址需要添加, 您可以很简单的使用您喜欢的文本编辑器打开这个文件添加域名, 每行一个:
your.isp.example.com other.isp.example.net users-isp.example.org www.example.org
现在邮件可以通过您的系统传送, 这个列表中存在的主机 (前提是用户在您的系统上已经有一个帐户) 将可以成功的发送。这是一个允许正常的远程用户从您的系统发送邮件, 并且阻止其它非法用户通过您系统发送垃圾邮件的好方法。