不发邮件也能做一次性邮箱检测:check-if-email-exists 邮箱地址验证与批量校验指南
【免费下载链接】check-if-email-existsCheck if an email address exists without sending any email, written in Rust. Comes with a ⚙️ HTTP backend.项目地址: https://gitcode.com/gh_mirrors/ch/check-if-email-exists
check-if-email-exists(Reacher)是一个 Rust 写的邮箱地址验证工具。它直接在邮件服务器上探测一个地址是否真实存在,全程不发出一封邮件。临时邮箱、失效账号,都能在用户无感知的情况下筛出来。
一次性邮箱检测的队列架构
注册表里为什么总混着临时邮箱
某晚查看新注册用户,你发现几十条账号的域名来自 10 分钟就注册一次的临时邮箱服务。这些人注册完就走,通知永远送不到。传统做法是发一封确认邮件,但临时邮箱照样能收到,问题没解决。你需要一种不发邮件就能验真的办法,还要能认出一堆一次性邮箱服务商。
不发邮件的验证原理
SMTP 是邮箱之间收发信的协议。工具直接连上目标域名的邮件服务器(默认 25 端口),走完 HELLO 握手、RCPT TO等对话步骤,从服务器给出的应答判断账号是否存在、是否被停用、收件箱是否已满。"不发邮件"的含义很具体:对话结束后,发件方队列里没有留下任何待发内容,用户不会收到任何通知。
探测前还会先做几件轻量的检查:
- 语法与域名:地址格式是否合法,域名有没有配置 MX 记录(MX 记录即域名指定的收信服务器);
- 临时邮箱识别:拿域名比对内置的一次性邮箱服务商域名特征库(基于 mailchecker 数据),
is_disposable字段直接给出结论; - 角色账号与 catch-all:
admin@、support@这类共享地址,以及"来者不拒"的 catch-all 域名,都会被单独标出。
所有信号汇总成is_reachable字段,取值safe、risky、invalid、unknown,含义见 docs/getting-started/is-reachable.md。临时邮箱会被归入risky。
批量场景走另一条路:邮箱地址先进 RabbitMQ 队列(一个消息中间件,任务先排队、再由工作节点取走执行),worker 按配置的并发数消费任务,结果落库 PostgreSQL。worker 可以横向加机器,批量邮箱校验的压力因此分散开。
🚀 3 分钟跑起来
- 拿到代码:
git clone https://gitcode.com/gh_mirrors/ch/check-if-email-exists,然后docker run -p 8080:8080 reacherhq/backend:latest,HTTP 后端直接起来(注意本机 25 端口出站要放开)。 - 改配置:核心参数在 backend/backend_config.toml,比如
http_port、SMTP 握手用的hello_name和from_email。开启批量功能时,把[worker]的enable设为true,并配置[worker.rabbitmq]与[storage.postgres]。 - 调接口验证一个地址:
curl -X POST http://localhost:8080/v0/check_email \ -H 'content-type: application/json' \ -d '{"to_email": "someone@gmail.com"}'返回 JSON 里有is_reachable、is_disposable、smtp.is_catch_all等字段,逐个地址下结论。/v0/check_email单条直查;/v1/bulk批量接口依赖上一步开启的 worker 与存储。
技术栈一览
| 组件 | 在系统里的角色 |
|---|---|
| Rust | 核心检测库与后端,SMTP 探测、域名特征匹配都在此完成 |
| REST API | 请求入口,/v0/check_email、/v1/bulk可直接 curl 调用 |
| PostgreSQL | 存验证结果与批量任务状态,支撑批量邮箱校验的查询 |
| RabbitMQ | 批量请求排队,worker 按并发数消费,支持多节点扩展 |
两个落地方向
- 注册入口拦截:表单提交后调用检测接口,
is_disposable为 true 或is_reachable为invalid的地址要求用户换邮箱再注册。 - 营销名单清洗:存量名单跑一遍批量校验,
invalid的移出投放范围,risky的单独复核,坏地址不再拉低整体送达率。
进阶定制
SMTP 代理池、请求限流([throttle])、worker 扩展等选项都在 docs/self-hosting/ 里,每项配置也支持用环境变量覆盖,无需改文件。
SMTP 对话加域名特征比对,就是这套检测的全部底牌。它省时间的地方,是把这整套流程封装成了开箱即用的 REST 服务。
【免费下载链接】check-if-email-existsCheck if an email address exists without sending any email, written in Rust. Comes with a ⚙️ HTTP backend.项目地址: https://gitcode.com/gh_mirrors/ch/check-if-email-exists
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考