验证电子邮件地址而不发送任何消息
使用三个 API 调用检查电子邮件语法、MX 记录和一次性域。 没有 SMTP 连接,没有验证电子邮件,没有退回风险。 免费电子邮件验证 API。
您的注册表单会收集一个电子邮件地址。 您存储它,发送欢迎消息和电子邮件
弹跳。 地址是一个错字。 或者该域名不存在。 或者它是一次性的
@mailinator.com 十分钟后就会失效的地址。 你现在有一个垃圾
数据库中的记录、受损的发件人声誉以及永远不会回来的用户。
传统的解决方法是发送验证电子邮件:“单击此链接以确认您的地址。” 它有效,但会增加摩擦。 转化率下降。 直到之后它才发现错字 您已经向错误地址发送了一条消息。
您可以在发送任何内容之前验证电子邮件地址。 三个API调用检查语法,MX 记录和一次性域。 整个过程不到200毫秒并捕获问题 90% 的电子邮件发送失败都是由这引起的。
三层电子邮件验证
每一层都会捕获不同类别的不良电子邮件地址。 将它们一起使用以获得完整的 电子邮件验证管道,或选择您需要的。
-
语法验证。 地址是否遵循有效格式? 是否有域名
有已知的拼写错误吗? 这
/v1/email/validate端点检查 RFC 5322 合规性, 检测基于角色的地址(admin@,support@),并建议 常见域拼写错误的更正,例如gmial.com或者hotmal.com。 -
MX 记录验证。 该域可以接收电子邮件吗? 这
/v1/email-mx/verify端点查询 DNS 的 MX 记录并回退到 A 记录。 如果该域没有邮件服务器,则该地址无法投递; 无需重试 会修复它。 -
一次性电子邮件检测。 该地址是否来自一次性服务? 这
/v1/disposable-email/check针对 700 多个已知一次性域进行端点检查 和模式匹配的变化。 它还标记该域名是否是免费提供商(Gmail、 Outlook),以便您可以区分个人地址和一次性地址。
检查电子邮件语法并发现拼写错误
这 /v1/email/validate 端点在一次调用中完成大部分工作。 它验证了
格式、查找 MX 记录、检查一次性域并检测流行的拼写错误
提供商域。
回复:
电子邮件 jamie@gmial.com 具有有效的语法,但域是一个拼写错误。 应用程序编程接口
回报 is_valid: false 因为不存在 MX 记录 gmial.com,
它建议正确的地址 jamie@gmail.com。 在中显示此建议
您的注册表单并将用户从死帐户中拯救出来。
验证 MX 记录以检查电子邮件是否真实
这 /v1/email-mx/verify 端点专注于 DNS。 它返回 MX 的完整列表
具有优先级和a的记录 deliverable 告诉您该域是否
可以收到邮件。
回复:
这 deliverable 字段返回三个值之一: "likely" (MX
找到的记录), "unknown" (不存在 MX,但存在 A 记录,因此该域可能
接受邮件),或 "unlikely" (没有 MX 和 A 记录)。 将其用于 MX 记录
当您需要原始 DNS 数据时进行验证。
检测一次性和一次性地址
这 /v1/disposable-email/check 端点标识临时电子邮件服务。
这些地址可以工作几分钟或几小时,然后停止接受邮件。
回复:
这 is_free field 将一次性域名与免费提供商分开。 一个 Gmail
地址返回 is_free: true 和 is_disposable: false。 邮寄者
地址返回 is_disposable: true 和 is_free: false。 这个
区别问题; 阻止所有免费提供商将锁定大部分互联网。
在 Node.js 中构建验证管道
将所有三个检查合并到一个函数中。 该管道按顺序运行每个检查 并在第一次故障时短路。
async function validateEmail(email) {
const headers = { "Content-Type": "application/json" };
const body = JSON.stringify({ email });
// Step 1: Syntax validation + typo detection
const syntaxRes = await fetch("https://api.botoi.com/v1/email/validate", {
method: "POST", headers, body,
});
const syntax = await syntaxRes.json();
if (!syntax.data.format_valid) {
return { valid: false, reason: "Invalid email format" };
}
if (syntax.data.suggestion) {
return {
valid: false,
reason: \`Did you mean \${syntax.data.suggestion}?\`,
};
}
// Step 2: MX record verification
const mxRes = await fetch("https://api.botoi.com/v1/email-mx/verify", {
method: "POST", headers, body,
});
const mx = await mxRes.json();
if (!mx.data.has_mx) {
return { valid: false, reason: "Domain cannot receive email" };
}
// Step 3: Disposable email detection
const dispRes = await fetch("https://api.botoi.com/v1/disposable-email/check", {
method: "POST", headers, body,
});
const disp = await dispRes.json();
if (disp.data.is_disposable) {
return {
valid: false,
reason: \`Disposable email detected (\${disp.data.provider})\`,
};
}
return { valid: true, reason: null };
}
// Usage
const result = await validateEmail("test@mailinator.com");
console.log(result);
// { valid: false, reason: "Disposable email detected (Mailinator)" }
顺序方法是可读的并且提前退出。 如果语法失败,则跳过网络 要求进行 MX 和一次性检查。 如果您更喜欢速度而不是提前终止,请运行所有 三个并联:
async function validateEmail(email) {
const headers = { "Content-Type": "application/json" };
const body = JSON.stringify({ email });
// Run all three checks in parallel
const [syntaxRes, mxRes, dispRes] = await Promise.all([
fetch("https://api.botoi.com/v1/email/validate", {
method: "POST", headers, body,
}),
fetch("https://api.botoi.com/v1/email-mx/verify", {
method: "POST", headers, body,
}),
fetch("https://api.botoi.com/v1/disposable-email/check", {
method: "POST", headers, body,
}),
]);
const [syntax, mx, disp] = await Promise.all([
syntaxRes.json(), mxRes.json(), dispRes.json(),
]);
const errors = [];
if (!syntax.data.format_valid) errors.push("Invalid format");
if (syntax.data.suggestion) errors.push(\`Typo: try \${syntax.data.suggestion}\`);
if (!mx.data.has_mx) errors.push("No MX records");
if (disp.data.is_disposable) errors.push("Disposable domain");
return {
valid: errors.length === 0,
errors,
details: { syntax: syntax.data, mx: mx.data, disposable: disp.data },
};
}
并行版本使用以下命令同时触发所有三个请求 Promise.all。
总延迟等于最慢的请求而不是总延迟。 对于大多数情况,这三个都
在 100 毫秒内完成。
Python 验证管道
Python 中同样的三步验证。 此示例使用 requests 图书馆
为了清楚起见。
import requests
API_BASE = "https://api.botoi.com/v1"
def validate_email(email: str) -> dict:
headers = {"Content-Type": "application/json"}
payload = {"email": email}
# Step 1: Syntax + typo check
syntax = requests.post(
f"{API_BASE}/email/validate", json=payload, headers=headers
).json()
if not syntax["data"]["format_valid"]:
return {"valid": False, "reason": "Invalid email format"}
suggestion = syntax["data"].get("suggestion")
if suggestion:
return {"valid": False, "reason": f"Did you mean {suggestion}?"}
# Step 2: MX record check
mx = requests.post(
f"{API_BASE}/email-mx/verify", json=payload, headers=headers
).json()
if not mx["data"]["has_mx"]:
return {"valid": False, "reason": "Domain cannot receive email"}
# Step 3: Disposable check
disp = requests.post(
f"{API_BASE}/disposable-email/check", json=payload, headers=headers
).json()
if disp["data"]["is_disposable"]:
provider = disp["data"]["provider"]
return {"valid": False, "reason": f"Disposable email ({provider})"}
return {"valid": True, "reason": None}
# Usage
result = validate_email("jamie@gmial.com")
print(result)
# {'valid': False, 'reason': 'Did you mean jamie@gmail.com?'}
何时验证电子邮件地址
不同的接触点需要不同的验证深度。 这是每张支票的适用范围。
| 接触点 | 句法 | MX检查 | 一次性的 | 为什么 |
|---|---|---|---|---|
| 注册表单 | 是的 | 是的 | 是的 | 在创建记录之前发现拼写错误、死域和一次性帐户 |
| 结帐/付款 | 是的 | 是的 | 选修的 | 收据需要可送达地址; 一次性支票取决于您的退款政策 |
| 联系表 | 是的 | 选修的 | 不 | 基本格式检查可防止明显的垃圾; MX 检查是一个奖励 |
| 订阅时事通讯 | 是的 | 是的 | 是的 | 保护发件人声誉; 高跳出率会让您被 ESP 标记 |
| 潜在客户导入/CRM | 是的 | 是的 | 是的 | 在数据进入管道之前对其进行清理可节省下游成本 |
| 内部工具 | 是的 | 不 | 不 | 语法检查捕获数据输入错误; 内部用户值得信赖 |
要点
- 存储前验证。 数据库中的每封不良电子邮件都会让您付出代价:存储、 发送失败、退回处理和发件人声誉受损。 抓住问题点 的条目。
-
拼写错误检测可以拯救用户。 这
/v1/email/validate终点 捕获常见的域拼写错误并返回建议。 浮出水面“你的意思是 jamie@gmail.com?” 防止用户流失。 - MX 检查快速且免费。 DNS 查找在几毫秒内解析。 有 没有理由跳过它们。 没有 MX 记录的地址永远不会收到您的电子邮件。
- 一次性检测可以保护试验滥用。 如果您提供免费试用或 免费增值计划,一次性电子邮件检测可阻止同一个人无限创建 具有一次性地址的帐户。
-
无需 API 密钥即可启动。 所有三个端点均在 5 处匿名工作
每分钟的请求数。 无需注册即可测试完整管道。 添加一个
Authorization: Bearer YOUR_KEY当您需要更高的吞吐量时。 -
并行运行检查速度。 三个端点是独立的。
使用
Promise.all将总延迟减少到最慢的单个请求,而不是 三者之和。
所有三个端点的完整文档位于
交互式 API 文档。
每个端点接受一个带有 email 字段并返回结果
Cloudflare 边缘网络的速度低于 100 毫秒。
FAQ
- 您可以在不发送电子邮件的情况下验证电子邮件地址吗?
- 是的。 您可以在不发送任何内容的情况下检查三件事:地址是否遵循有效语法 (RFC 5322)、域是否具有配置为接收邮件的 MX 记录以及域是否属于已知的一次性电子邮件提供商。 这三项检查在注册时捕获了大多数错误地址。
- botoi 电子邮件验证 API 是免费的吗?
- 是的。 匿名访问的速度为每分钟 5 个请求,并具有基于 IP 的速率限制。 无需 API 密钥、无需注册、无需信用卡。 为了获得更高的吞吐量,付费计划的起价为 9 美元/月,包括对所有 150 多个 API 端点的访问。
- MX记录验证和SMTP验证有什么区别?
- MX 记录验证检查域是否具有配置为接受电子邮件的邮件服务器。 它确认该域通常可以接收邮件。 SMTP 验证更进一步,连接到邮件服务器并询问特定邮箱是否存在。 MX 检查速度快(低于 100 毫秒)并且免费。 SMTP 检查速度较慢,可能会被邮件服务器阻止,并且可能会触发速率限制或垃圾邮件标志。
- 一次性电子邮件检测的准确度如何?
- botoi 一次性电子邮件端点会检查 700 多个已知的一次性域,并使用模式匹配来捕获变化(包含“temp”、“trash”、“throaway”等的域)。 它还区分一次性域名和 Gmail 或 Outlook 等免费提供商。 没有一个检测列表是 100% 完整的,但它涵盖了所有广泛使用的一次性服务。
- 我应该在客户端还是服务器上验证电子邮件?
- 两个都。 在客户端上运行基本格式检查以获得即时反馈。 在写入数据库之前,在服务器上运行 MX 和一次性检查。 客户端验证改善用户体验; 服务器端验证可以保护您的数据。 永远不要单独信任客户端检查,因为它们可以被绕过。
开始使用 botoi 构建
150+ 个 API 端点,涵盖查询、文本处理、图片生成和开发者工具。免费套餐,无需信用卡。