SMTP 验证
verify 命令连接目标域名的 MX 服务器,通过 SMTP RCPT TO 检查来判断指定邮箱是否存在。
工作原理
1. 解析目标域名的 MX 记录
2. 连接到主 MX 服务器的 25 端口
3. 发送 EHLO、MAIL FROM 和 RCPT TO 命令
4. 解析服务器响应码:
- 2xx:邮箱存在(已接受)
- 4xx:临时性失败(灰名单、频率限制)
- 5xx:邮箱被拒绝(不存在或策略封锁)基本用法
smtp-probe verify user@example.com25 端口要求
SMTP 验证需要出站 TCP 25 端口的访问权限。大多数云厂商(AWS、GCP、Azure、阿里云)默认封锁此端口。你需要申请 25 端口解封,或在允许出站 25 端口的基础设施上运行 smtp-probe。
check 命令(基于 DNS)无需 25 端口即可正常工作。
绑定 IP
从指定 IP 地址发出 SMTP 连接(适用于服务器有多个出站 IP 的场景):
smtp-probe verify user@example.com --bind-ip 1.2.3.4超时设置
调整连接和响应的超时时间:
smtp-probe verify user@example.com --timeout 30s结合一次性邮箱检测
若域名属于已知的一次性邮箱服务商,则完全跳过 SMTP 握手:
smtp-probe verify user@mailinator.com --disposable结合免费邮箱检测
标记地址为免费邮箱并继续 SMTP 验证:
smtp-probe verify user@gmail.com --free与一次性邮箱检测不同,免费邮箱检测不会跳过 SMTP — 仅标记结果。
结合 IP 池
使用 IP 池实现自动故障转移 — 当一个 IP 被封禁时,自动切换到下一个健康 IP:
smtp-probe verify user@example.com --pool响应码说明
| 码段 | 含义 |
|---|---|
2xx | 邮箱存在(已接受) |
4xx | 临时性拒绝(稍后重试) |
5xx | 永久性拒绝(不存在或策略封锁) |
5xx 响应并不总是意味着邮箱不存在。部分服务商会返回 550 作为全量拒绝策略,以防止地址采集。角色邮箱检测
smtp-probe 会自动检测角色邮箱地址(如 admin@、support@、marketing@):
角色 : ⚠ 是 (MARKETING)检测到角色邮箱时,结果中会包含 IsRole 标记和 RoleCategory 分类。角色邮箱在 SMTP 验证之前进行检查,因此检测适用于所有验证路径。
域名拼写纠错
当域名存在拼写错误或 SMTP 验证失败时,smtp-probe 会建议最可能的正确域名:
建议 : 💡 Did you mean user@gmail.com?以下场景会触发纠错建议:
- MX 查询失败或无记录
- SMTP 连接失败(statusCode 0)
- SMTP 返回 5xx 永久拒绝