FreeBSD 使用手册
上一页 | 第29章 　电子邮件 | 下一页

# 29.3 sendmail 配置

作者：Christopher Shumway.

sendmail(8) 是 FreeBSD 中的默认邮件传输代理 (MTA)。 sendmail 的任务是从邮件用户代理 (MUA) 接收邮件然后根据配置文件的定义把它们送给配置好的的寄送程序。 sendmail 也能接受网络连接， 并且发送邮件到本地邮箱或者发送它到其它程序。

sendmail 使用下列配置文件：

文件名 | 功能
--- | ---
`/etc/mail/access` | sendmail 访问数据库文件
`/etc/mail/aliases` | 邮箱别名
`/etc/mail/local-host-names` | sendmail 接收邮件主机列表
`/etc/mail/mailer.conf` | 邮寄配置程序
`/etc/mail/mailertable` | 邮件分发列表
`/etc/mail/sendmail.cf` | sendmail的主配置文件
`/etc/mail/virtusertable` | 虚拟用户和域列表

## 29.3.1 `/etc/mail/access`

访问数据库定义了什么主机或者 IP 地址可以访问本地邮件服务器和它们是哪种类型的访问。 主机可能会列出 `OK`、 `REJECT`、`RELAY` 或者简单的通过 sendmail 的出错处理程序检测一个给定的邮件错误。 主机默认列出 `OK`，允许传送邮件到主机， 只要邮件的最后目的地是本地主机。列出 `REJECT` 将拒绝所有的邮件连接。如果带有 `RELAY` 选项的主机将被允许通过这个邮件服务器发送邮件到任何地方。

例 29-1. 配置 sendmail 的访问许可数据库

    cyberspammer.com                550 We do not accept mail from spammers
    FREE.STEALTH.MAILER@            550 We do not accept mail from spammers
    another.source.of.spam          REJECT
    okay.cyberspammer.com           OK
    128.32                          RELAY

在上面的例子中我们有 5 条记录。 与左边列表匹配的发件人受到右边列表动作的影响。 前边的两个例子给出了 sendmail 的出错处理程序检测到的错误代码。 当一个邮件与左边列表相匹配时，这个信息会被打印到远程主机上。 下一条记录拒绝来自 Internet 上的一个特别主机的邮件 `another.source.of.spam`。接下来的记录允许来自 `okay.cyberspammer.com` 的邮件连接， 这条记录比上面那行 `cyberspammer.com` 更准确。更多的准确匹配使不准确的匹配无效。最后一行允许电子邮件从主机和 `128.32` 开头的 IP 地址转发。 这些主机将被允许通过这台邮件服务器前往其它邮件服务器发送邮件。

当这个文件被升级的时候，您必须在 `/etc/mail/` 运行 `make` 升级数据库。

## 29.3.2 `/etc/mail/aliases`

别名数据库包含一个扩展到用户，程序或者其它别名的虚拟邮箱列表。 下面是一些在 `/etc/mail/aliases` 中使用的例子：

例 29-2. 邮件别名

    root: localuser
    ftp-bugs: joe,eric,paul
    bit.bucket:  /dev/null
    procmail: "|/usr/local/bin/procmail"

这个文件的格式很简单； 冒号左边的邮箱名， 会被展开成右边的形式。 第一个例子简单地将 `root` 邮箱扩展为 `localuser`， 之后将继续在别名数据库中进行查找。 如果没有找到匹配的记录， 则邮件会被发给本地用户 `localuser`。 第二个例子展示了一个邮件列表。 发送到 `ftp-bugs` 的邮件会被展开成 `joe`， `eric` 和 `paul` 这三个邮箱。 注意也可以通过 `<user@example.com>` 这样的形式来指定远程的邮箱。 接下来的例子展示了如何把邮件写入到文件中， 这个例子中是 `/dev/null`。 最后一个例子展示了如何将邮件发给一个程序， 具体而言是通过 UNIX® 管道发到 `/usr/local/bin/procmail` 的标准输入。

更新此文件时， 您需要在 `/etc/mail/` 中使用 `make` 来更新数据库。

## 29.3.3 `/etc/mail/local-host-names`

这是一个 sendmail(8) 被接受为一个本地主机名的主机名列表。 可以放入任何 sendmail 将从那里收发邮件的域名或主机。例如，如果这个邮件服务器从域 `example.com` 和主机 `mail.example.com` 接收邮件，它的 `local-host-names` 文件，可以看起来象如下这样：

    example.com
    mail.example.com

当这个文件被升级，sendmail(8) 必须重新启动，以便更新设置。

## 29.3.4 `/etc/mail/sendmail.cf`

sendmail的主配置文件 `sendmail.cf` 控制着 sendmail 的所有行为， 包括从重写邮件地址到打印拒绝远程邮件服务器信息等所有事。 当然，作为一个不同的角色，这个配置文件是相当复杂的， 它的细节部分已经超出了本节的范围。幸运的是， 这个文件对于标准的邮件服务器来说很少需要被改动。

sendmail 主配置文件可以用 m4(1) 宏定义 sendmail 的特性和行为。它的细节请看 `/usr/src/contrib/sendmail/cf/README`。

当这个文件被修改时， sendmail 必须重新启动以便对新修改生效。

## 29.3.5 `/etc/mail/virtusertable`

`virtusertable` 映射虚拟域名和邮箱到真实的邮箱。 这些邮箱可以是本地的、远程的、`/etc/mail/aliases` 中定义的别名或一个文件。

例 29-3. 虚拟域邮件映射的例子

    root@example.com                root
    postmaster@example.com          postmaster@noc.example.net
    @example.com                    joe

在上面这个例子中， 我们映射了一个域 `example.com`。 这个文件是按照从上到下， 首个匹配的方式来处理的。 第一项将 `<root@example.com>` 映射到本地邮箱 `root`。 下一项则将 `<postmaster@example.com>` 映射到位于 `noc.example.net` 的 `postmaster`。 最后， 如果没有来自 `example.com` 的匹配， 则将使用最后一条映射， 它表示将所有的其它邮件发给 `example.com` 域的某个人。 这样， 将映射到本地信箱 `joe`。

上一页 | 起始页 | 下一页
使用电子邮件 | 上一级 | 改变您的邮件传输代理程序

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

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