关于 Email Verifier (SMTP, MX, Catch-All)
Email Verifier 批量检查邮箱语法、DNS/MX、名单特征及实时 SMTP 握手,且不会发送邮件。它面向代码、n8n 工作流和 AI Agent,结果字段固定,并区分可投递、风险、未知和不可投递状态。
主要功能
- 01批量检查语法、DNS/MX 和 SMTP
- 02识别一次性及角色邮箱
- 03探测全收件域名
- 04返回固定的状态和检查字段
- 05提供 n8n 工作流模板
适用场景
- 01发送前筛查潜在客户名单
- 02注册时拦截一次性邮箱
- 03将不确定的邮箱转入重试或复核
- 04将邮箱验证接入 AI Agent
MCP 相关
可通过限定为此 Actor 的 Apify MCP 服务使用。README 还提供了 MCP 客户端配置示例。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.apify.com/?tools=sumitr_mardy/email-verifierclaude mcp add --transport http sumitrmardy-email-verifier https://mcp.apify.com/?tools=sumitr_mardy/email-verifier{"mcpServers":{"sumitrmardy-email-verifier":{"type":"http","url":"https://mcp.apify.com/?tools=sumitr_mardy/email-verifier"}}}在 Cursor 中打开{"servers":{"sumitrmardy-email-verifier":{"type":"http","url":"https://mcp.apify.com/?tools=sumitr_mardy/email-verifier"}}}在 VS Code 中打开{"mcpServers":{"sumitrmardy-email-verifier":{"type":"http","url":"https://mcp.apify.com/?tools=sumitr_mardy/email-verifier"}}}{"mcpServers":{"sumitrmardy-email-verifier":{"serverUrl":"https://mcp.apify.com/?tools=sumitr_mardy/email-verifier"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
https://mcp.apify.com/?tools=sumitr_mardy/email-verifier需要授权工具
详细介绍
English | 简体中文
批量电子邮件验证 API — 适用于 n8n、AI Agent 和 MCP
批量验证电子邮件地址:RFC 5322 语法 → DNS/MX → 一次性邮箱、角色邮箱和免费服务商列表 → 实时 SMTP 握手,并强制执行 catch-all 探测。绝不会发送电子邮件——检查会开启 SMTP 会话、读取回复代码,然后断开连接。
➜ 在 Apify 上试用
{
"email": "[email protected]",
"status": "deliverable",
"sub_status": "valid_mailbox",
"score": 100,
"checks": {
"syntax": true, "domain_exists": true, "mx_found": true,
"smtp_connectable": true, "mailbox_exists": true, "catch_all": false,
"disposable": false, "role_based": false, "free_provider": false,
"a_record_fallback": false, "has_tag": false
},
"mx_record": "aspmx.l.google.com"
}
为什么工作流喜欢它
大多数验证工具都是为查看仪表板的人编写的。而这个工具假定调用方是代码。
因此,输出必须保证:
1. status 始终是四个值之一。 deliverable、undeliverable、risky、unknown。绝不会是 null、空值或第五种值。只需枚举一次,就能始终正确处理。
2. 每条记录都包含全部 11 个 checks 键。 从未运行的检查值为 false,原因则记录在 sub_status 中。不会遗漏任何内容。
3. 如实报告 catch-all 域名和 Gmail 类型的服务商。 它们会返回带有原因的 risky,而不是捏造一个“有效”结果。
这三点意味着你可以这样写:
const mailable = results.filter(r => r.status === 'deliverable');
const neverSend = results.filter(r => r.status === 'undeliverable' || r.checks.disposable);
const retryLater = results.filter(r => r.status === 'unknown');
而不必这样写:
const mailable = results.filter(r => r?.status === 'valid' && (r.checks?.catch_all ?? false) === false);
第二行就是所有默认允许 null 的 API 迫使你写的代码。对 Agent 来说,这比对人更重要:Agent 不能写 ?? false——它会依据读取到的内容采取行动。字段有时会消失并非不便,而是带着十足把握传递了错误答案。
如何处理每种结果
status | sub_status | 处理方式 |
|---|---|---|
deliverable | valid_mailbox | 发送 |
risky | role_based | 只有可以接受共享收件箱时才发送 |
risky | catch_all | 无法确认邮箱——少量发送,或通过其他方式补充信息 |
risky | free_provider_unverifiable | 视为消费者地址;无法通过 SMTP 确认邮箱 |
risky | full_mailbox | 暂缓,几天后重试 |
risky | disposable | 不要发送;在注册时拦截 |
unknown | greylisted | 30–60 分钟后重试——这不是无效地址 |
unknown | smtp_timeout | 稍后重试;如果问题持续存在,则视为未验证 |
unknown | internal_error | 重试一次 |
undeliverable | 任意 | 从列表中移除 |
包含分数和判断依据的完整表格:docs/statuses.md
重要区别在于:undeliverable 表示我们已确认地址无效;unknown 表示我们无法确认。将两者混为一谈的工具会显示更好看的数字,却悄悄从你的列表中删掉真实客户。
在 n8n 中使用
每个模板都通过核心 HTTP Request 节点调用 Actor——无需安装社区节点,可在 n8n Cloud 和可自托管的 n8n 上使用。身份验证使用名为 Apify API 的 n8n Header Auth 凭据;此处不会在任何文件中存储令牌。
| 模板 | 功能 | 导入 |
|---|---|---|
| 验证 Google Sheets 潜在客户列表 | 读取尚无判定结果的行,分批验证,并将 status/score 写回。可安全重复运行和安排定时运行。 | t1-google-sheets.json |
| 注册时拦截一次性邮箱 | 接收 Webhook,返回 {allow|review|block},策略集中在一个可编辑的 Code 节点中。 | t2-signup-check.json |
| 冷邮件发送前清理 CSV | 上传 Apollo/Instantly/HubSpot 导出文件,返回三个 CSV,分别包含 send_safe / review / drop。灰名单中的行会重试一次。 | t3-clean-csv.json |
| AI Agent 工具 | 一个仅将验证器作为工具的 AI Agent,并附有教它使用上述操作表的系统提示词。 | t4-ai-agent-tool.json |
四个模板的中文版本(含本地化便笺):workflows/zh-CN/
**导入方法:**下载 JSON 文件,然后在 n8n 中选择 Workflows → Import from File。每个工作流的便笺中都包含设置步骤。
在 AI Agent 中使用
MCP — Apify MCP 服务,仅限此 Actor 使用。Claude Desktop 和 Cursor 的配置:agents/mcp/
OpenAPI — Dify、Coze、GPT Actions 和 LangChain 的 OpenAPI 工具包都能导入的单个文件:openapi/email-verifier.openapi.yaml
工具定义 — 可直接用于 OpenAI 函数调用和 Anthropic 工具 API 的 JSON:agents/tool-definitions/
供 Agent 自身使用 — llms.txt 一次性列出完整约定:端点、输入、输出、操作表和批处理限制。
在代码中使用
curl -X POST "https://api.apify.com/v2/acts/sumitr_mardy~email-verifier/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"emails":["[email protected]","[email protected]"]}'
Python 和 Node 示例均不超过 25 行,无需 SDK:examples/
大型列表
每次调用都应将地址放在一个批次中,而不是每个地址单独调用——批处理能让验证既便宜又快速。
同步 Apify 运行必须在 300 秒内完成。超过此时限时,请使用异步模式:启动运行、等待完成,然后获取数据集。可运行示例:examples/batch-large-list/
实测吞吐量和建议使用的批次大小:docs/pricing-and-batching.md
定价
按事件付费:每个获得判定结果的地址收费一次——包括 undeliverable 和 unknown,因为无论结果如何,验证工作都已完成;而确认无效的地址正是你付费要获得的结果。不按运行次数收费。
费率根据你的 Apify 计划分级,并会随市场调整,因此此处不再列出,以免信息过时:查看当前定价。
调用 API 需要 Apify 账户;提供免费套餐。
已知限制
如实说明这些限制,因为你迟早会发现。
- **无法验证免费邮箱服务商的邮箱是否存在。**Gmail、Outlook、Yahoo 和 iCloud 会对不存在的地址返回
250,随后在投递时退信。任何声称能通过 SMTP 判断 Gmail 邮箱是否存在的服务商,都是在猜测。你会得到risky/free_provider_unverifiable和checks.mailbox_exists: false。 - **无法验证全收域名的邮箱是否存在。**这是由其定义决定的。探测会识别此类域名并明确说明,而不会返回看似确定的猜测结果。
- **灰名单不是判定结果。**遇到
421/450时,会返回unknown/greylisted,此结果可重试。T3 模板会为你执行重试。
常见问题
它会发送邮件吗?
不会。它会建立 SMTP 会话,发送 EHLO、MAIL FROM 和 RCPT TO,读取回复代码,然后断开连接。它绝不会发送 DATA,因此整个过程中都不会生成任何邮件正文。
它能验证 Gmail 地址吗? 它会验证语法和域名是否有效,以及地址是否为一次性邮箱。但它无法确认某个具体的 Gmail 邮箱是否存在——Google 对真实地址和虚假地址的回复完全相同。任何使用 SMTP 的工具都无法做得更好;声称可以的工具只是在猜测。
什么是全收域名?
这类域名会接受发往任何地址的邮件,无论该地址是否存在。在验证器查询你的地址之前,它会对一个随机的本地部分发送 RCPT TO,而该部分不可能存在。如果对方接受了请求,该域名就是全收域名,其上的每个地址都会标记为 risky/catch_all。
每次调用最多可以验证多少封邮件? 只要能在 300 秒的同步限制内完成,数量不限。请用你自己的列表进行测算;参见 docs/pricing-and-batching.md。超过限制时,请使用异步模式。
如何处理 Apollo / Instantly / Lemlist 导出的文件? 使用模板 T3——上传 CSV 文件,即可获取三个清理后的列表。它会自动选择电子邮件列,并先去重,因此同一地址不会被重复收费。
重复项会怎样处理? 重复项也会收费。调用前请先去重;这里的每个模板都会自动执行去重。
采用 MIT 许可。欢迎提交问题和拉取请求,尤其欢迎使用不同版本且发现行为差异的用户修正 n8n 模板。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。