31.8.在拨号连接中使用邮件

当使用静态 IP 地址时,应该无需调整默认配置。将主机名设置为指定的互联网名称,剩下的就由 Sendmail 来完成。

当使用一个动态分配的 IP 地址和拨号 PPP 连接到互联网时,人们通常在 ISP 的邮件服务器上有一个邮箱。在这个例子中,ISP 的域名是 example.net,用户名是 user,主机名是 bsd.home,ISP 允许 relay.example.net 作为一个邮件中继。

为了从 ISP 的邮箱中检索邮件,请从 ports 安装检索代理。mail/fetchmail 是一个不错的选择,因为它支持许多不同的协议。通常情况下,ISP 会提供 POP。当使用用户 PPP 时,在 /etc/ppp/ppp.linkup 中的以下条目,当互联网连接建立后,可以自动获取电子邮件:

MYADDR:
!bg su user -c fetchmail

当使用 Sendmail 向非本地账户投递邮件时,配置 Sendmail 在互联网连接建立后立即处理邮件队列。要做到这一点,在 /etc/ppp/ppp.linkup 中的上述 fetchmail 条目之后添加这一行:

!bg su user -c "sendmail -q"

在这个例子中,在 bsd.home 上有一个 user 的账户。在 bsd.home 上的用户的主目录下,创建一个包含这一行的 .fetchmailrc

poll example.net protocol pop3 fetchall pass MySecret

这个文件除了 user 之外任何人都不能读,因为它包含密码 MySecret

为了发送带有正确的标头 from: 的邮件,配置 Sendmail 使用 user@example.net,而非 user@bsd.home,并且通过 relay.example.net 发送所有的邮件,这样可以更快地传输邮件。

下面的 .mc 应该足够了:

VERSIONID(`bsd.home.mc version 1.0')
OSTYPE(bsd4.4)dnl
FEATURE(nouucp)dnl
MAILER(local)dnl
MAILER(smtp)dnl
Cwlocalhost
Cwbsd.home
MASQUERADE_AS(`example.net')dnl
FEATURE(allmasquerade)dnl
FEATURE(masquerade_envelope)dnl
FEATURE(nocanonify)dnl
FEATURE(nodns)dnl
define(`SMART_HOST', `relay.example.net')
Dmbsd.home
define(`confDOMAIN_NAME',`bsd.home')dnl
define(`confDELIVERY_MODE',`deferred')dnl

关于如何将这个文件转换成 sendmail.cf 格式的细节,请参考上一节。在更新 sendmail.cf 之后,不要忘记重新启动 Sendmail。