文档首页> 技术教程> 表单收不到邮件:25 端口被封的真相

表单收不到邮件:25 端口被封的真相

发布时间:2025-10-09 20:26        更新时间:2025-10-09 23:47
结论先说:网站表单的邮件发不出去,多数不是代码问题,而是云服务器默认封禁了出站 25 端口,邮件根本没出门。 一、为什么 25 端口会被封 垃圾邮件的主要来源就是被攻陷的服务器直发,所以主流云环境默认拦截出站 25 端口,除非主动申请解封。新开的机器第一次尝试直发邮件时,连接会在网关处直接被拦,应用看到的报错通常是 connect timeout,而不是明确的拒绝信息。封锁发生在网络层,邮件程序和系统日志都不会直接告诉你端口被封,这也是这个问题反复被问的原因。注意被封的只有出站方向,收信不受影响,所以现象是"发不出、收得到"。 二、怎么确认是端口问题 在服务器上分别测试两个端口的连通性: nc -vz smtp.example.com 25 nc -vz smtp.example.com 465 25 端口卡住超时、465 端口秒通,基本就能定性。两个端口都测一遍再下结论,只测 25 超时就认定被封,可能漏掉账号密码错误这类真问题。没有 nc 命令的话,用 curl -v telnet://smtp.example.com:25 也能看到同样的超时现象。也可以看邮件组件的日志,/var/log/maillog(Ubuntu 上是 /var/log/mail.log)里长时间停在 connect 阶段,是同样的信号。 三、替代端口怎么用 邮件提交走 465(SMTPS)或 587(submission)不受出站封禁影响。把程序里的 SMTP 配置改两项:端口从 25 换成 465,加密方式选 SSL;用 587 则配 STARTTLS。改完还有下一个坑:465 配了 STARTTLS、587 配了 SSL 都会握手失败,报错里会带协议字样,对号入座即可。各类语言自带或常用的 SMTP 库都有这两项参数,改完配置重启一下应用进程,老进程还握着旧配置的情况很常见,然后再发一封测试信验证。 四、不折腾的中继方案 让邮件交给专门的中继服务投递,程序只负责把信交给中继的 465 端口,送达率和信誉维护都由对方承担,表单通知这种低频发送用它最省事。确实需要服务器直发的场景(比如内网告警),向云服务商提交解封申请,说明用途和发送量,通过率会高一些;解封后把 SPF、DKIM 配齐,否则邮件还是进垃圾箱。