下一页 上一页 目录

3. 按需拨号解决方案 PART

作者:Jan P Tietze <jptietze@mail.hh.provi.de>。

许多 Linux 用户通过拨号线路访问互联网,并且许多人决定在其系统上实现按需拨号功能。也就是说,每当某种 IP 数据包需要离开本地网络或本地主机时,将自动建立与互联网服务提供商 (ISP) 的连接。在一段时间内没有数据包通过后,连接将被断开。

虽然这非常方便且经济高效,但在一种特殊情况下,这既不方便(因为启动“传统”调制解调器拨号的时间非常明显)也不经济高效,这就是发送电子邮件。电子邮件通常通过 SMTP 发送,可以通过您自己的系统或通过通常位于您的 ISP 网络中的互联网上的 SMTP 主机传递。

对于拨号线路,每次发送消息都必须建立连接。如果您只发送一条消息,这还可以接受,但如果您碰巧创建并发送多条消息,多次建立连接可能会很麻烦且不经济高效。此外,如果您的 ISP 对允许您登录的时间施加限制,这也将限制您在一天中的某些时间推迟发送消息,并且您必须稍后手动发送它们。

本文档的第 1 节将解决这种情况,但是,在外部 DNS 查找会导致连接建立的情况下,即使电子邮件只是在排队,连接仍然会被建立。原因是 sendmail 希望“规范化”主机名。

解决这个问题的方法是双重的:首先,我们必须适度更改 sendmail.cf。然后我们必须定义实际邮件传递的过程。就我个人而言,我更喜欢让 cron 为我完成这项工作,并在下面描述必要的更改。

3.1 配置 sendmail.cf

由于 [1.2] 中所述的原因,我建议修改 m4 源文件,而不是直接编辑 sendmail.cf。这实际上会为您节省很多麻烦,并使配置更改更加详细。

首先,执行本文档第一部分中描述的所有更改。然后浏览特定于按需拨号的内容。

直接配置 sendmail.cf,用于简单的配置

直接配置非常不切实际,而且一点也不详细,但显然,这是您的决定。

在您的 sendmail.cf 文件的非常底部附近,应该有一行内容如下:

R$* < @ $* $~P > $*               $: $1 < @ $[ $2 $3 $] > $4

在该行前面加上“#”,使其变为:

#R$* < @ $* $~P > $*              $: $1 < @ $[ $2 $3 $] > $4

使用 m4 源文件配置 sendmail.cf。

将以下行添加到 /usr/src/sendmail-8.8.7/cf/cf/yourhostname.smtp.mc

FEATURE(nocanonify)dnl

然后可以通过发出以下命令来构建最终的 sendmail.cf。请记住在安装新的 /etc/sendmail.cf 之前始终备份旧的。

cp /etc/sendmail.cf /etc/sendmail.cf.bak
cd /usr/src/sendmail-8.8.7/cf/cf
m4 yourhostname.smtp.mc > /etc/sendmail.cf

3.2 添加拨号延迟

通常情况下,安装拨号延迟非常有用,尤其是在使用调制解调器线路时。这意味着如果 sendmail 尝试发起连接以发送电子邮件(这会导致线路连接),但链路实际建立的时间比 sendmail 认为合理的超时时间要长,sendmail 将简单地等待几秒钟,然后重试。

直接配置 sendmail.cf

在您的 sendmail.cf 文件中的某处可能有一行内容如下:

#O DialDelay=10s

(或非常相似)。删除“#”。如果行首没有“#”,则应认为一切正常(这只是意味着之前已启用此功能)。

如果您的 sendmail.cf 文件中没有这样的行,请添加一行(明智的做法是在文件的“options”部分中添加此行)

O DialDelay=10s

现在将“10s”部分更改为您认为合适的秒数。

使用 m4 源文件配置 sendmail.cf

将以下行添加到 /usr/src/sendmail-8.8.7/cf/cf/yourhostname.smtp.mc

define(`confDIAL_DELAY',`10s')

现在将“10s”部分更改为您认为合适的秒数。

然后可以通过发出以下命令来构建最终的 sendmail.cf。请记住在安装新的 /etc/sendmail.cf 之前始终备份旧的。

cp /etc/sendmail.cf /etc/sendmail.cf.bak
cd /usr/src/sendmail-8.8.7/cf/cf
m4 yourhostname.smtp.mc > /etc/sendmail.cf


下一页 上一页 目录