自己搭邮件服务器的朋友,经常会遇到一个让人抓狂的现象:收信一切正常,邮件也能进到邮箱里,但一旦要往外发信,就像石沉大海,要么直接被退信,要么卡在发送队列里不动。这到底是为什么呢?

其实,“能收不能发”是一个非常典型的故障特征。接收邮件(IMAP/POP3)和发送邮件(SMTP)走的是不同的路子,用的端口也不一样。既然能收,说明你的网络是通的,服务大体也是活的,问题大概率出在发送层面的限制上。下面我就把这个问题的几个常见“嫌疑人”和排查思路给大家好好捋一捋。

一、 首要嫌疑人:25端口被封禁

这是最最常见的原因,没有之一。

Port 25 check result showing connection timed out

使用 telnet 命令检测 25 端口连通性示意图

我们平时发邮件走的是 SMTP 协议,标准端口是 25。为了遏制垃圾邮件,现在绝大多数云服务商(特别是 AWS、Google Cloud、Oracle Cloud、阿里云国际版等)以及家庭宽带运营商,默认都会把出站 TCP 25 端口给封了。

怎么查? 不用瞎猜,直接用 telnet 命令测一下。在你的服务器上运行: telnet smtp.gmail.com 25

  • 如果显示 Connected,说明 25 端口是通的,可以考虑下一个嫌疑人。
  • 如果一直卡着不动或者显示 Connection refused/timed out,那么恭喜你,中奖了,是被封了。

怎么破?

  1. 找云商解封: 部分云商(如 DigitalOcean、Vultr)在工单申请后可能给你解封,但门槛很高,通常得是企业账号才能申请。
  2. 使用 587 或 465 端口: 如果只是为了客户端发信(比如手机、电脑上的 Outlook/Thunderbird),可以绕过 25 端口,改用 Submission 端口(587)或 SMTPS(465)。但这通常只适用于 MSA(邮件提交代理),服务器之间互发邮件还是得靠 25。
  3. 中继转发: 这是终极方案,花钱买个 SMTP 中继服务(如 SendGrid、Mailgun、Amazon SES),把服务器发出的邮件通过他们的渠道转发出去,这就绕过了 25 端口的封锁。

Email authentication DNS records diagram

邮件认证相关的 DNS 记录(SPF/DKIM)配置示意

二、 DNS 记录没配好:SPF 和 DKIM 疑云

现在的邮件服务器都矫情得很,为了防伪造,都会严格校验你的 DNS 记录。如果你只有 A 记录和 MX 记录,很可能发出去的邮件会被对方拒收或直接丢进垃圾箱。

  1. SPF (Sender Policy Framework): 这是一行 TXT 记录,用来告诉世界“哪些 IP 地址有资格代表我发邮件”。如果你的服务器 IP 不在 SPF 列表里,哪怕你发出了邮件,对方一看 SPF 校验失败(hard fail),直接就给拒了。

    • 检查建议: 去你的 DNS 管理面板看有没有类似 v=spf1 ip4:你的服务器IP -all 的记录。
  2. DKIM (DomainKeys Identified Mail): 这是给邮件盖个“数字签名”,证明这封信确实是你发的,且中途没被篡改。如果没有配置 DKIM,哪怕能发出去,信誉度也会大打折扣。

  3. rDNS (PTR 记录): 也就是反向 DNS。很多大厂(比如 Gmail、QQ 邮箱)会检查你的 IP 是否解析回你的域名。如果 IP 反解出来是个乱七八糟的名字或者没有 PTR 记录,发信成功率极低。

三、 服务器时间不同步

这听起来有点玄学,但确实存在。邮件协议中涉及到很多加密验证和会话超时,如果你的 VPS 服务器时间跟标准时间差得太远(比如没装 NTP 服务),对方的邮件服务器可能会认为你的请求不合法或已过期,从而拒绝连接。

解决: 装个 chronyntpdate,把时间同步一下。 timedatectl set-ntp true

四、 IP 地址进了“黑名单”

虽然这是个能收信的新服务器,但它的 IP 地址可能被前人用坏了。如果你用的是廉价 VPS,IP 是循环利用的,很有可能前任机主拿这个 IP 狂发垃圾邮件,导致被各大 RBL(实时黑名单列表,如 Spamhaus)收录。

怎么查? 去像 MXToolbox 或者 Spamhaus 这样的网站,输入你的服务器 IP 查一下是不是背了案。如果是,只能联系云商换 IP 或者慢慢等从黑名单里移除了。

五、 Postfix/Dovecot 配置失误

如果你是自己搭的 Postfix,还要检查一下配置细节:

  • inet_interfaces = all:确保持监听所有网卡,不要只监听 localhost。
  • myhostnamemydomain:必须设置正确,且最好与 PTR 记录一致。
  • 日志查看:这是最后的底线。遇到问题先别慌,去撸日志: tail -f /var/log/maillog 日志里通常会明确写出为什么发不出去,是“Connection timed out”还是“Relay access denied”,对症下药才是最快的。

总结一下

遇到“能收不能发”,别去怀疑人生,按这个顺序查:

  1. 测 25 端口通不通(不通就换端口或用中继)。
  2. 查 IP 是否进了黑名单。
  3. 补全 SPF、DKIM 和 rDNS 记录。
  4. 看 Maillog 里的报错信息。

自建邮箱虽然麻烦,但数据掌握在自己手里的安全感也是无可替代的。遇到坑是正常的,填平它,你的运维水平就又上了一个台阶!

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭