让 Postfix 指向邮件中继,而不是 Web 代理
为 Postfix 选择 SMTP 中继,并把它与 HTTP CONNECT 路线区分开。
relayhost = proxy.example.net:3128 看起来说得通,直到两端真正开始对话。Postfix 期待的是 SMTP 对端,而 3128 上的 Web 代理期待的是 HTTP 代理请求。双方都得不到自己等待的那种会话。
如果网络提供了获批的邮件中继,那就改为配置那个 SMTP 服务。典型写法是:
relayhost = [smtp-relay.example.net]:587主机名和端口只是示例。方括号会抑制对该中继名称的 MX 查询。它们并不会加上 HTTP CONNECT、TLS 或身份验证。中继所需的 submission、SASL 与 TLS 设置要另行配置。
两个账户也可能并不相同。Web 代理接受的密码并不会自动成为邮件提交凭据,而且中继在接受连接之后仍然可以拒收发件人。
如果唯一获批的路径是隧道呢?
当 HTTP 代理允许目标与端口时,它可以经 CONNECT 承载 SMTP。但这并不会让任意 SMTP 客户端去生成 CONNECT。像 curl 这样的工具带有明确的代理隧道选项;设置 Postfix 的 relayhost 是另一套接口。
固定的 SSH 转发或专门构建的本地传输适配器可以把一个获批的 SMTP 服务暴露为本地 TCP 端点。在这种设计里,Postfix 与该端点讲 SMTP,适配器负责另一种传输。请保持其受限,并保留目标邮件服务器的 TLS 身份:把连接地址改成 loopback 可能影响基于名称的证书策略。
当邮件中继正是网络运营方提供的服务时,优先用它。它为队列、发件人策略和投递错误提供了一个懂 SMTP 的归宿。仅靠 Web 代理设置无法提供上述任何邮件功能。