31.4.改变邮件传输代理 ===================== FreeBSD 已经安装了 Sendmail 作为 MTA,负责发信和收信。然而,系统管理员可以改变系统的 MTA。在 FreeBSD Ports 的 ``mail`` 类别中,有大量的 MTA 可供选择。 如果安装了新的 MTA,在替换 Sendmail 之前要配置和测试新的软件。关于如何配置软件的信息,请参考新 MTA 的文档。 新的 MTA 开始工作之后,使用本节中的说明来禁用 Sendmail,并配置 FreeBSD 来使用替换的 MTA。 31.4.1.停用 Sendmail -------------------- **警告** 如果 Sendmail 的外发邮件服务被禁用,重要的是要用一个另外的邮件发送系统来代替它。否则,诸如 `periodic(8) `__ 这样的系统功能将无法通过电子邮件来传递它们的结果。系统的许多部分都期望有一个功能性的 MTA。如果应用程序在禁用 Sendmail 之后继续使用 Sendmail 的二进制文件来尝试发送电子邮件,那么邮件可能会进入一个不活跃的 Sendmail 队列而永远不会被投递。 为了完全禁用 Sendmail,在 **/etc/rc.conf** 中添加或编辑以下几行: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session sendmail_enable="NO" sendmail_submit_enable="NO" sendmail_outbound_enable="NO" sendmail_msp_queue_enable="NO" 要只禁用 Sendmail 的入站邮件服务,只需在 **/etc/rc.conf** 中使用这个条目: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session sendmail_enable="NO" 关于 Sendmail 的启动选项的更多信息可以在 `rc.sendmail(8) `__ 中找到。 31.4.2.替换默认的 MTA --------------------- 当使用 Ports 安装新的 MTA 时,它的启动脚本也会被安装,并且在其软件包信息中提到了启动说明。在启动新的 MTA 之前,请停止运行中的 Sendmail 进程。该例子停止所有这些服务,然后启动 Postfix 服务: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # service sendmail stop # service postfix start 为了在系统启动时启动替换的 MTA,在 **/etc/rc.conf** 中添加其配置行。这个条目可以启用 Postfix MTA: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session postfix_enable="YES" 一些额外的配置是需要的,因为 Sendmail 被广泛使用,以至于一些软件认为它已经被安装和配置了。检查 **/etc/periodic.conf**\ ,确保这些值被设置为 ``NO``\ 。如果这个文件不存在,用这些条目创建它: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session 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** 看起来像这样: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # $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 安装时,会提示为新的二进制文件更新这个文件。例如,Postfix 会像这样更新文件: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # # 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 `__ 所安装的二进制文件: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session 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。