20.3. sendmail 配置

Contributed by 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 虚拟用户和域列表

20.3.1. /etc/mail/access

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

Example 20-1. 配置sendmail 访问数据库

cyberspammer.com                550 We don't accept mail from spammers
FREE.STEALTH.MAILER@            550 We don't 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升级数据库.

20.3.2. /etc/mail/aliases

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

Example 20-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来升级数据库.

20.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) 必须重新启动,以便更新设置.

20.3.4. /etc/mail/sendmail.cf

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

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

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

20.3.5. /etc/mail/virtusertable

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

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

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

在上面这个例子里, 我们映射了一个域 example.com. 这个文件用一个最初匹配的文件处理. 第一项映射 root@example.com 到本地邮箱root. 下一项映射 postmaster@example.comnoc.example.net主机的postmaster邮箱. 最后, 如果域example.com没有被什么匹配, 它将与最后一个映射匹配, 在example.com域,每个其它邮件信息地址到某一个主机被匹配. 在这里被映射到本地邮箱joe.