20.5. 疑难解答

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

20.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'', 问题.

20.5.2. sendmail 提示信息``mail loops back to myself''

下面是 sendmail FAQ中的回答:

我得到了一个如下的信息``Local configuration error'':

553 relay.domain.net config error: mail loops back to myself
554 <user@domain.net>... Local configuration error

我如何解决这个问题?

你已经通过使用一个MX记录把邮件发送给了将被转寄的特定主机(在这个例子里是, relay.domain.net)的域 (例如, domain.net),而这个转寄的机器不认为它自己是domain.net.请把domain.net添加到/etc/mail/local-host-names文件
(如果你使用(use_cw_file)的话) 或者添加``Cw domain.net''
到/etc/mail/sendmail.cf.

sendmail FAQ可以在 http://www.sendmail.org/faq/被找到,如果你想要对你的邮件做任何的``设定''我推荐你阅读它.

20.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 service provider's 邮件列表拿来的.

> 我们为用户提供副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记录就可以了.

20.5.4. 为什么当我发送邮件到其它主机总是有``Relaying Denied''出错信息?

在默认的FreeBSD安装, sendmail的配置只是从主机传送邮件 . 例如, 如果一个POP3服务被安装,那么用户将可以学校,公司,或者其它什么地方检查邮件,但是他们不能从外部发送邮件 . 典型的, 做这些尝试之后,邮件从 MAILER-DAEMON传送一个 ``5.7 Relaying Denied''错误信息.

这里有几个方法避免这个. 最直截了当的解决方法是在 relay-domains文件 /etc/mail/relay-domains放入你的IP地址. 一个快捷的方法如下:

# 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

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