Postfix 和 Sendmail 是同一个东西吗?

Postfix 与 Sendmail 都是邮件传输代理(MTA)但不是同一个软件:架构、配置、安全性、性能对比,为什么现代系统默认 Postfix,以及兼容性说明与 FAQ。

最佳实践
Postfix 和 Sendmail 是同一个东西吗?封面

不是。两者都是 MTA(邮件传输代理,负责在服务器间路由和投递邮件),但 Sendmail 是 1980 年代的历史级软件,Postfix 是 1998 年为替代它而生的现代重写——架构、安全性、可配置性全面不同。 今天几乎所有 Linux 发行版的默认 MTA 都是 Postfix。

核心差异对照

维度 Sendmail Postfix
诞生 1983 年,互联网早期 1998 年,Wietse Venema 设计
架构 单体大进程,一个程序干所有事 模块化,master 调度多个各司其职的小进程
安全记录 历史包袱重,早年漏洞频发 设计即以安全为先,权限最小化、队列隔离
配置 sendmail.cf 由 m4 宏生成,语法晦涩 main.cf 键值对直白可读,postconf 管理
性能 高负载下表现一般 队列管理高效,吞吐明显更好
队列 单一队列目录 分层队列(incoming/active/deferred……)

为什么会有"是同一个东西"的错觉

Postfix 刻意保持了命令行兼容:它自带一个名为 sendmail 的兼容命令,路径、参数和 Sendmail 的一致。所以很多教程里的 sendmail -t、PHP mail() 默认调 /usr/sbin/sendmail——在装了 Postfix 的机器上实际调用的是 Postfix 的兼容前端。这让不少人误以为二者是同一软件。

实际建议

  • 新部署:没有理由选 Sendmail,用 Postfix(或 Exim,另一主流选择)。
  • 存量 Sendmail 系统:迁移通常不复杂,Postfix 对 Sendmail 的别名文件、forward 文件都兼容。
  • 只是要发通知邮件:更推荐用第三方 SMTP 服务 + msmtp/ssmtp 这类轻量提交代理,比维护完整 MTA 省心。

观测云对照

无论用哪个 MTA,"邮件发没发出去、卡在哪个队列"都不能靠猜。把 mail 日志(/var/log/mail.logmaillog)通过 DataKit 采集到观测云,在日志查看器里按 status=bounced/deferred 过滤;再对队列长度(mailq 输出做成指标)和退信率配告警,邮件通道的健康度就纳入了统一监控视图。

常见问题(FAQ)

Q:系统里 which sendmail 有输出,装的是 Sendmail 吗?
A:不一定。postfix 包提供了同名兼容命令。看 sendmail -d0.1 -bv root 的版本输出,或直接 postconf mail_version 确认是不是 Postfix。

Q:PHP 的 mail() 函数需要装哪个?
A:mail() 默认调本机 sendmail 命令,Postfix 装上即可满足。但生产环境建议 PHP 直接走 SMTP 发信服务,绕开本机 MTA 的队列和信誉问题。

Q:Postfix 能完全替代 Sendmail 的所有功能吗?
A:对 99% 的使用场景(发信、中继、虚拟域、别名)可以。Sendmail 一些冷僻的邮件列表/网关特性在 Postfix 里要换实现方式,但新系统基本不会用到。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台