适用场景
在日常开发中,邮箱地址的有效性直接关系到用户准备、消息推送、营销活动等环节的成败。传统做法往往只做正则格式校验,但这类校验无法识别临时邮箱、域名无效、拼写错误等问题。邮箱地址检测接口提供一次请求完成六项检测的能力,适用于以下典型场景:
- 用户准备与反垃圾:在准备流程中拦截临时邮箱或无法接收邮件的地址。
- 邮件营销列表清洗:批量验证邮箱列表的可用性,提高送达率。
- KYC风控辅助:对高风险用户填写的邮箱进行综合评分,辅助决策。
- 账号恢复与通知:确保系统发出的通知邮件能成功投递。
接口能力边界
该接口为综合性邮箱质量评估接口,单次GET请求即可完成以下六项检测:
- RFC 5322格式校验:按照邮件地址标准格式验证语法正确性。
- 临时/一次性邮箱检测:基于开源域名库(72,345条记录,3个数据源合并去重)识别。
- MX记录验证:通过AliDNS DoH查询域名MX记录,避免传统
getmxrr()的不稳定性。 - 拼写纠正:对常见域名拼写错误进行提示,如
gmial.com建议gmail.com。 - 服务商识别:识别QQ邮箱、Gmail、网易、Outlook等40+主流邮箱服务商。
- 综合风险评分:返回0-100的风险分数及详细原因清单。
接口的QPS限制为10次/秒,超出可能被限流,详情以官方文档为准。
请求参数与鉴权
Query参数
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| 是 | string | 要检测的邮箱地址,最长254字符(RFC 5321上限) |
Header参数
| 参数 | 是否必填 | 类型 | 说明 |
|---|---|---|---|
| X-API-Key | 否 | string | API密钥,不传时使用匿名额度(可能有次数限制) |
建议在正式环境中始终携带X-API-Key,以保证稳定的调用权限。
使用curl发起请求
以下是一个完整的curl请求示例(请将$APIZERO_API_KEY替换为你的实际API Key,<email>替换为待检测邮箱):
curl -sS \ -X GET \ -H "X-API-Key: $APIZERO_API_KEY" \ "https://v1.apizero.cn/api/email-check?email=<email>"例如,检测test@gmial.com(故意拼写错误):
curl -sS \ -X GET \ -H "X-API-Key: your_api_key_here" \ "https://v1.apizero.cn/api/email-check?email=test@gmial.com"返回的JSON格式如下(部分字段省略):
{ "code": 0, "msg": "成功", "data": { "email": "test@gmial.com", "domain": "gmial.com", "local": "test", "valid_format": true, "is_disposable": false, "has_mx": false, "provider": null, "risk_score": 5, "risk_level": "invalid", "reasons": [ "⚠️ 域名无 MX 记录,无法接收邮件", "⚠️ 域名疑似拼写错误,建议用 gmail.com", "⚠️ 本地部分含测试/系统类关键词" ], "spelling_suggestion": "gmail.com" }, "request_id": "mota..." }使用Python调用
除了curl,你也可以在Python中通过requests库调用该接口。以下是一个简单的示例:
import requests url = "https://v1.apizero.cn/api/email-check" api_key = "your_api_key_here" email = "test@gmial.com" headers = {"X-API-Key": api_key} params = {"email": email} response = requests.get(url, headers=headers, params=params) data = response.json() print(f"风险评分: {data['data']['risk_score']}") print(f"风险等级: {data['data']['risk_level']}") print("原因列表:") for reason in data['data']['reasons']: print(f" - {reason}") if data['data']['spelling_suggestion']: print(f"拼写建议: {data['data']['spelling_suggestion']}")运行后输出类似:
风险评分: 5 风险等级: invalid 原因列表: - ⚠️ 域名无 MX 记录,无法接收邮件 - ⚠️ 域名疑似拼写错误,建议用 gmail.com - ⚠️ 本地部分含测试/系统类关键词 拼写建议: gmail.com返回值字段解读
响应最外层包含code、msg、data和request_id。code为0表示成功,其他值为错误码。data对象中包含以下核心字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| string | 原始输入的邮箱地址 | |
| domain | string | 邮箱域名部分 |
| local | string | 本地部分(@之前) |
| valid_format | boolean | 是否通过RFC 5322格式校验 |
| is_disposable | boolean | 是否为临时/一次性邮箱 |
| disposable_match | string or null | 命中的临时邮箱域名(如有) |
| has_mx | boolean | 域名是否存在MX记录 |
| mx_records | array | MX记录列表(若无则为空数组) |
| provider | string or null | 邮箱服务商名称,如gmail、qq、outlook等,未识别时为null |
| is_trusted | boolean | 是否属于可信服务商(目前仅当provider为已知主流服务商时为true) |
| risk_score | integer | 综合风险评分,0-100,分数越高风险越大 |
| risk_level | string | 风险等级:valid、risky、invalid等 |
| reasons | array of string | 风险原因列表,包含格式化提示、MX缺失、拼写建议等 |
| spelling_suggestion | string or null | 拼写纠正建议域名,如gmail.com,若无拼写错误则为null |
例如,对一个正常邮箱user@gmail.com,返回结果中has_mx为true,risk_score通常为0或极低,risk_level为valid,reasons可能为空或仅有正常提示。
常见错误及处理
1. 参数缺失或格式错误
若未提供email参数或邮箱格式不符合规范,接口可能返回code=400。检查URL中email参数是否正确编码,尤其是包含特殊字符时(如+号)。
2. API Key无效或匿名额度不足
当使用无效的API Key或匿名额度耗尽时,接口返回code=401或code=429。建议始终在Header中携带有效的X-API-Key。
3. QPS超限
超出10次/秒的限制会返回code=429(Too Many Requests)。可通过增加重试休眠机制或请求排队来解决。
4. 网络超时或DNS问题
建议设置合理的超时时间(如5秒),并添加重试逻辑,避免因网络抖动导致单次请求失败。
工程化注意事项
1. 缓存策略
对同一邮箱多次验证的场景(如重复提交),建议在应用层做短时缓存(例如缓存10分钟),避免频繁调用消耗额度。注意缓存过期时间不要过长,因为邮箱的MX记录和风险状态可能会变化。
2. 批量验证
如果需要批量验证大量邮箱,务必控制并发数不超过QPS限制,可采用队列或令牌桶限流。单次请求只支持一个邮箱,批量时需循环调用。
3. 安全与隐私
邮箱地址属于用户隐私数据,传输时应全程使用HTTPS(接口已是HTTPS)。不要在日志中明文记录完整邮箱,可考虑只记录部分或哈希值。
4. 结果使用
根据risk_level和reasons做业务决策。例如:
risk_level为invalid→ 直接拒绝准备。risk_level为risky→ 可纳入人工审核或二次验证。risk_level为valid且is_disposable为false→ 可正常通过。
5. 错误码扩展
建议为每个业务场景编写相应的错误处理逻辑,参考接口返回的code和msg。例如,code=500时可能为服务内部错误,可等待后重试。
参考文档
- 邮箱地址检测接口文档
- 原始接口说明