技术解析 · 附来源的解答
如何检查 587 端口是否开放
您可以使用 telnet、netcat 或 PowerShell 等命令行工具尝试连接 SMTP 服务器,以检查 587 端口是否开放。如果连接成功,服务器通常会返回 220 问候码,表示该端口已开放并接受邮件提交连接。
使用 Telnet 测试连通性
Telnet 是测试 TCP 连通性的标准工具。在终端中运行 telnet smtp.example.com 587。如果屏幕变为空白或显示服务器问候语,说明端口已开放。如果收到连接被拒绝或超时错误,说明端口已关闭或被防火墙拦截。注意,在 Windows 上可能需要先在“Windows 功能”中启用 telnet 才能使用。
在 Linux 和 macOS 上使用 Netcat(nc)
Netcat 是一款功能强大的网络调试工具。使用命令 nc -zv smtp.example.com 587。z 参数让 netcat 只扫描正在监听的守护进程而不发送数据,v 参数启用详细输出。成功时,输出会明确说明到该端口的连接已成功;失败时则会提示连接超时或被拒绝。
在 Windows 上使用 PowerShell
对于没有 telnet 的 Windows 用户,PowerShell 提供了 Test-NetConnection cmdlet。执行 Test-NetConnection -ComputerName smtp.example.com -Port 587。输出中会包含布尔值 TcpTestSucceeded,如果为 True,说明 587 端口已开放。在现代 Windows 环境中更推荐这种方法,因为它能提供有关网络路径的详细诊断信息。
排查端口被封锁的问题
如果 587 端口处于关闭状态,请检查本地防火墙设置和 ISP 限制。许多家庭宽带 ISP 会封锁出站邮件端口以防止垃圾邮件。您可以使用 SendHQ 或其免费工具(https://sendhq.cc/tools)验证外部配置,确保邮件服务器可以从公共互联网访问。请确保云服务商的安全组允许 TCP 587 的出站流量。
了解 587 端口与 STARTTLS
587 端口是邮件提交的标准端口。与使用隐式 TLS 的 465 端口不同,587 端口以明文连接开始,再通过 STARTTLS 命令升级为安全连接。因此,简单的 TCP 检查只能确认端口已开放,要验证加密是否正常工作,还需要完成完整的 SMTP 握手。
团队常问的问题
25 端口和 587 端口有什么区别?
25 端口主要用于服务器之间的中继,而 587 端口是指定用于客户端向服务器提交邮件的端口。
为什么连接 587 端口会超时?
超时通常表示有防火墙在丢弃数据包。请检查本地操作系统防火墙、网络路由器或云安全组规则。
telnet 连接成功就意味着能发送邮件吗?
不是,这只能确认 TCP 端口已开放。要成功发送邮件,您仍需要有效的身份验证和正确的 SMTP 命令。
587 端口安全吗?
配合 STARTTLS 使用时,587 端口是安全的,STARTTLS 会在初始连接建立后对通信进行加密。
一手资料
- 服务名称与传输协议端口号注册表 — IANA
- RFC 3207:基于传输层安全(TLS)的安全 SMTP 服务扩展 — RFC Editor
- RFC 8314:SMTP 之外邮件协议的明文传输注意事项 — RFC Editor