主机名解析问题
默认情况下,Linux 的 /etc/hosts 文件不支持单个主机名对应多个 IP 地址。这会导致 Postfix SMTP 服务器报错"主机名 XXX 无法解析为地址 YYY",尤其在同时拥有 IPv4 和 IPv6 地址的主机上问题突出。为解决此问题,需启用多 IP 地址支持:
/etc/host.conf: ... # 我们有具有多个 IP 地址的机器。 multi on ...
或者,在 main.cf 中指定 RESOLV_MULTI 环境变量:
/etc/postfix/main.cf: import_environment = MAIL_CONFIG MAIL_DEBUG MAIL_LOGTAG TZ XAUTHORITY DISPLAY LANG=C RESOLV_MULTI=on
Berkeley DB 问题
如果无法编译 Postfix 因为找不到文件 "db.h",则必须安装与系统库匹配的 Berkeley DB 开发包(名称:db??-devel-???)。可通过 rpm 命令查看已安装的包。例如:
$ rpm -qf /usr/lib/libdb.so db4-4.3.29-2
这意味着您需要安装 db4-devel-4.3.29-2(在某些系统上,请使用 "rpm -qf /lib/libdb.so" 代替)。
请勿从网络下载 Berkeley DB 的其他版本。所有 Postfix 程序在使用与系统库例程所用版本不同的 Berkeley DB 版本编译时都会发生核心转储。请参阅 DB_README 文件以获取更多信息。
Procmail 问题
在 RedHat Linux 7.1 及更高版本中,procmail 没有权限写入邮件队列目录。解决方法:
# chmod 1777 /var/spool/mail
容器中的日志记录
在容器中运行 Postfix 时,您可以按照 MAILLOG_README 中所述使用 stdout 日志记录。替代方案:在容器中运行 syslogd,或将主机的 syslog 套接字挂载到容器中。
syslogd 性能
在 Linux 中,syslogd 默认使用同步写入。由于此原因,syslogd 实际上可能比 Postfix 消耗更多系统资源。为避免此问题,请通过编辑 /etc/syslog.conf 并为日志文件名前添加一个 - 来禁用同步邮件日志文件写入:
/etc/syslog.conf: mail.* -/var/log/mail.log
向 syslogd 发送 "kill -HUP" 命令以使更改生效。
其他日志性能问题
在 Linux 系统中,systemd 会拦截所有日志并强制执行自己的速率限制,然后再将请求转发给后端服务(如 rsyslogd 或 syslog-ng)。在繁忙的邮件服务器上,这可能导致信息丢失。作为临时解决方案,您可以使用 Postfix 的内置日志记录功能,具体请参阅 MAILLOG_README。