29.4. 改变邮件传输代理
FreeBSD 已经安装了 Sendmail 作为 MTA (邮件传输代理),负责发信和收信。然而,系统管理员可以改变系统的 MTA。在 FreeBSD Ports Collection 的邮件类别中,有大量可供选择的 MTA 。
安装了新的 MTA 之后,在替换 Sendmail 之前要配置和测试新的软件。关于如何配置软件的信息,请参考 MTA 的文档。
新的 MTA 开始工作后,使用本节中的说明来禁用 Sendmail 并配置 FreeBSD 来使用替换的 MTA 。
29.4.1.关闭 Sendmail
警告
如果 Sendmail 的发送邮件服务被禁用,需要用一个替代的邮件发送系统来代替它。否则,像 periodic(8) 这样的系统功能将无法通过电子邮件传递其结果。系统的许多部分都期望有一个功能性的 MTA 。如果应用程序在禁用 Sendmail 后继续使用 Sendmail 的二进制文件来尝试发送电子邮件,那么邮件可能会进入一个不活跃的 Sendmail 队列而永远不会被送达。
为了完全禁用 Sendmail ,在 /etc/rc.conf 中添加以下几行:
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
要只禁用 Sendmail 的入站邮件服务,只需在 /etc/rc.conf 中使用这个配置:
sendmail_enable="NO"
更多关于 Sendmail 的启动选项的信息可以在 rc.sendmail(8) 中找到。
29.4.2.替换默认 MTA
当使用 Ports Collection 安装一个新的 MTA 时,它的启动脚本也会被安装,并且在其软件包信息中提到了启动说明。在启动新的 MTA 之前,停止正在运行的 Sendmail 进程。这个例子停止所有这些服务,然后启动 Postfix 服务:
# service sendmail stop
# service postfix start
为了在系统启动时启动替换的 MTA ,在 /etc/rc.conf 中添加下面的配置。这个配置可以启用 Postfix MTA :
postfix_enable="YES"
一些额外的配置是必需的,因为 Sendmail 已经很普遍了,以至于一些软件认为它已经被安装和配置了。检查 /etc/periodic.conf ,确保这些值被设置为 NO
。如果这个文件不存在,用这些配置创建它:
daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"
一些替代的 MTA 提供了它们自己兼容的 Sendmail 命令行界面实现,以便于将它们用作 Sendmail 的直接替代品。然而,一些 MUA 可能会试图执行标准的 Sendmail 二进制文件,而不是新的 MTA 的二进制文件。FreeBSD 使用 /etc/mail/mailer.conf 来将预期的 Sendmail 二进制文件映射到新的二进制文件的位置。关于这种映射的更多信息可以在 mailwrapper(8) 中找到。
默认的 /etc/mail/mailer.conf 是这样的:
# $FreeBSD$
#
# Execute the "real" sendmail program, named /usr/libexec/sendmail/sendmail
#
sendmail /usr/libexec/sendmail/sendmail
send-mail /usr/libexec/sendmail/sendmail
mailq /usr/libexec/sendmail/sendmail
newaliases /usr/libexec/sendmail/sendmail
hoststat /usr/libexec/sendmail/sendmail
purgestat /usr/libexec/sendmail/sendmail
当左边列出的任何命令被运行时,系统实际上会执行右边显示的相关命令。这个系统使得改变这些默认二进制文件被调用时执行的二进制文件变得很容易。
一些 MTA 在使用 Ports Collection 安装时,会提示为新的二进制文件更新这个文件。例如,Postfix 会这样更新这个文件:
#
# Execute the Postfix sendmail program, named /usr/local/sbin/sendmail
#
sendmail /usr/local/sbin/sendmail
send-mail /usr/local/sbin/sendmail
mailq /usr/local/sbin/sendmail
newaliases /usr/local/sbin/sendmail
如果 MTA 的安装没有自动更新 /etc/mail/mailer.conf ,请用文本编辑器编辑这个文件,使其指向新的二进制文件。下面的例子指向 mail/ssmtp
所安装的二进制文件:
sendmail /usr/local/sbin/ssmtp
send-mail /usr/local/sbin/ssmtp
mailq /usr/local/sbin/ssmtp
newaliases /usr/local/sbin/ssmtp
hoststat /usr/bin/true
purgestat /usr/bin/true
配置完毕后,建议重新启动系统,以确保正确的配置在启动时自动启动新的 MTA 。