29.5. 疑难解答
上一页 | 第 29 章 电子邮件 | 下一页

## 29.5. 疑难解答

29.5.1. 为什么必须在我的站点的主机上使用 FQDN？
29.5.2. sendmail 提示信息 mail loops back to myself
29.5.3. 我如何在一个拨号主机上运行一个邮件服务？
29.5.4. 为什么当我发送邮件到其它主机总是有 Relaying Denied 出错信息？

29.5.1. | 为什么必须在我的站点的主机上使用 FQDN？

您可能会发现主机实际上是在另外一个域里面， 例如，如果您是在 `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” 问题。

29.5.2. | sendmail 提示信息 mail loops back to myself

下面是 sendmail FAQ 中的回答：

我得到了如下的信息： 553 MX list for domain.net points back to relay.domain.net 554 <user@domain.net>... 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/ 找到， 如果您想要对您的邮件做任何的“调整”， 则推荐首先看一看它。

29.5.3. | 我如何在一个拨号主机上运行一个邮件服务？

您想要把局域网上的 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 记录就可以了。

29.5.4. | 为什么当我发送邮件到其它主机总是有 Relaying Denied 出错信息？

默认的 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

现在邮件可以通过您的系统传送， 这个列表中存在的主机 (前提是用户在您的系统上已经有一个帐户) 将可以成功的发送。这是一个允许正常的远程用户从您的系统发送邮件， 并且阻止其它非法用户通过您系统发送垃圾邮件的好方法。

上一页 | 上一级 | 下一页
29.4. 改变您的邮件传输代理程序 | 起始页 | 29.6. 高级主题

本文档和其它文档可从这里下载： ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题，请先阅读 文档，如不能解决再联系 <questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.