Postfix 和 Sendmail 是同一个东西吗?

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

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

不是。两者都是 MTA(邮件传输代理,负责在服务器间路由和投递邮件),但 Sendmail 是 1980 年代的历史级软件,Postfix 是 1998 年发布、面向兼容替代需求独立设计的 MTA——架构、安全性、可配置性全面不同。 发行版可能默认不安装 MTA,也可能采用不同实现,应检查实际软件包。

核心差异对照

维度 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 的兼容前端。这让不少人误以为二者是同一软件。

实际建议

  • 新部署:可评估 Postfix(或 Exim),并结合现有集成和维护能力选择。
  • 存量 Sendmail 系统:Postfix 支持常见别名和 forward 机制,但复杂规则、认证、中继与邮件网关配置需要逐项迁移验证。
  • 只是要发通知邮件:更推荐用第三方 SMTP 服务 + msmtp/ssmtp 这类轻量提交代理,比维护完整 MTA 省心。

常见问题(FAQ)

Q:系统里 which sendmail 有输出,装的是 Sendmail 吗?
A:不一定。postfix 包提供了同名兼容命令。先用 command -v sendmail 查路径,再用发行版包管理器查该文件属于哪个软件包;postconf mail_version 能确认已安装的 Postfix 版本,但不单独证明当前 sendmail 路径指向它。

Q:PHP 的 mail() 函数需要装哪个?
A:类 Unix 系统通常由 sendmail_path 配置本机提交命令;Windows 可使用 SMTP 配置。安装 Postfix 后还需正确配置投递或中继,不能保证装完就能送达。但生产环境建议 PHP 直接走 SMTP 发信服务,绕开本机 MTA 的队列和信誉问题。

Q:Postfix 能完全替代 Sendmail 的所有功能吗?
A:常见发信、中继、虚拟域、别名场景通常有对应实现,但不能保证所有配置直接兼容。Sendmail 一些冷僻的邮件列表/网关特性在 Postfix 里要换实现方式,但新系统基本不会用到。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台