check-if-email-exists
无需发送任何邮件即可检查电子邮件地址是否存在。
附带⚙️ HTTP 后端。
👉 在线演示:https://reacher.email
这是开源项目,但我也提供了一个 SaaS 解决方案,将 check-if-email-exists
打包在一个友好的网页界面中。如果您感兴趣,可以在 Reacher 了解更多信息。如有任何问题,可以通过 amaury@reacher.email 联系我。
开始使用
使用 check-if-email-exists
的 3 种非 SaaS 方式。
1. ⚙️ 使用 Docker 的 HTTP 后端(热门方法 🥇)[完整文档]
此选项允许您使用 Docker 🐳 在云实例或自己的服务器上运行 HTTP 后端。请注意,必须开放出站端口 25。
docker run -p 8080:8080 reacherhq/backend:latest
然后发送 POST http://localhost:8080/v0/check_email
请求,请求体如下:
{
"to_email": "someone@gmail.com",
"from_email": "my@my-server.com", // (可选)在 SMTP `FROM` 命令中使用的电子邮件,默认为 "user@example.org"
"hello_name": "my-server.com", // (可选)在 SMTP `EHLO` 命令中使用的名称,默认为 "localhost"
"proxy": { // (可选)用于验证的 SOCK5 代理,默认为空
"host": "my-proxy.io",
"port": 1080,
"username": "me", // (可选)代理用户名
"password": "pass" // (可选)代理密码
},
"smtp_port": 587 // (可选)用于电子邮件验证的 SMTP 端口,默认为 25
}
2. 下载 CLI [完整文档]
注意:CLI 二进制文件不连接任何后端,它直接从您的计算机检查电子邮件。
前往发布页面并下载适用于您平台的二进制文件。
> $ check_if_email_exists --help
check_if_email_exists 0.9.1
无需发送邮件即可检查电子邮件地址是否存在。
用法:
check_if_email_exists [FLAGS] [OPTIONS] [TO_EMAIL]
查看专用 README.md了解所有选项和标志。
3. 程序化使用 [完整文档]
在您自己的 Rust 项目中,您可以在 Cargo.toml
中添加 check-if-email-exists
:
[dependencies]
check-if-email-exists = "0.9"
并在代码中如下使用:
use check_if_email_exists::{check_email, CheckEmailInput, CheckEmailInputProxy};
async fn check() {
// 假设我们要测试 someone@gmail.com 的可投递性。
let mut input = CheckEmailInput::new(vec!["someone@gmail.com".into()]);
// 使用 async/await 语法验证此电子邮件。
let result = check_email(&input).await;
// `result` 是一个 `Vec<CheckEmailOutput>`,其中 CheckEmailOutput
// 结构包含了我们电子邮件的所有信息。
println!("{:?}", result);
}
参考文档托管在 docs.rs 上。
✈️ JSON 输出
输出将是以下格式的 JSON,字段应该是自解释的。对于 someone@gmail.com
(注意它被 Gmail 禁用),以下是确切的输出:
{
"input": "someone@gmail.com",
"is_reachable": "invalid",
"misc": {
"is_disposable": false,
"is_role_account": false
},
"mx": {
"accepts_mail": true,
"records": [
"alt3.gmail-smtp-in.l.google.com.",
"gmail-smtp-in.l.google.com.",
"alt1.gmail-smtp-in.l.google.com.",
"alt4.gmail-smtp-in.l.google.com.",
"alt2.gmail-smtp-in.l.google.com."
]
},
"smtp": {
"can_connect_smtp": true,
"has_full_inbox": false,
"is_catch_all": false,
"is_deliverable": false,
"is_disabled": true
},
"syntax": {
"domain": "gmail.com",
"is_valid_syntax": true,
"username": "someone",
"suggestion": null
}
}
这个工具检查什么?
是否包含 | 功能 | 描述 | JSON 字段 |
---|---|---|---|
✅ | 邮箱可达性 | 我们对发送邮件到此地址的信心如何?可能是 safe 、risky 、invalid 或 unknown 之一。 | is_reachable |
✅ | 语法验证 | 地址的语法是否有效? | syntax.is_valid_syntax |
✅ | DNS 记录验证 | 邮箱地址的域名是否有有效的 MX DNS 记录? | mx.accepts_mail |
✅ | 一次性邮箱地址 (DEA) 验证 | 该地址是否由已知的一次性邮箱地址提供商提供? | misc.is_disposable |
✅ | SMTP 服务器验证 | 是否能成功连接到邮箱地址域名的邮件交换服务器? | smtp.can_connect_smtp |
✅ | 邮件可投递性 | 发送到此地址的邮件是否可投递? | smtp.is_deliverable |
✅ | 邮箱已禁用 | 此邮箱地址是否已被邮件提供商禁用? | smtp.is_disabled |
✅ | 邮箱已满 | 此邮箱的收件箱是否已满? | smtp.has_full_inbox |
✅ | 泛接收地址 | 此邮箱地址是否为泛接收地址? | smtp.is_catch_all |
✅ | 角色账户验证 | 该邮箱地址是否为知名的角色账户? | misc.is_role_account |
✅ | Gravatar 链接 | Gravatar 邮箱地址头像的链接 | misc.gravatar_url |
✅ | Have I Been Pwned? | 此邮箱是否在数据泄露中被泄露? | misc.haveibeenpwned |
🔜 | 免费邮箱提供商检查 | 该邮箱地址是否绑定到已知的免费邮箱提供商? | Issue #89 |
🔜 | 特定提供商的语法验证 | 根据目标邮件提供商的语法规则,该地址的语法是否有效? | Issue #90 |
🔜 | 蜜罐检测 | 测试的邮箱地址是否隐藏了蜜罐? | Issue #91 |
🤔 为什么?
许多在线服务(https://hunter.io、https://verify-email.org、https://email-checker.net)以收费方式提供此服务。这里提供了一个开源替代方案。
许可证
check-if-email-exists
的源代码采用双重许可模式提供。
商业许可
如果您想使用 check-if-email-exists
开发商业网站、工具和应用程序,商业许可是合适的选择。通过此选项,您的源代码将保持专有。请在 https://reacher.email/pricing 购买 check-if-email-exists
商业许可。
开源许可
如果您正在创建一个与 GNU Affero GPL 许可证 v3 兼容的开源应用程序,您可以根据 AGPL-3.0 的条款使用 check-if-email-exists
。
➡️ 阅读更多 关于 Reacher 的许可信息。
❓ 常见问题
is_reachable: "unknown"
是什么意思?
这意味着服务器目前不允许实时验证邮箱。这可能由多种原因造成:您的 IP 被列入黑名单,SMTP 端口 25 被封锁,邮箱账户暂时接收过多邮件(垃圾邮件保护)... 或者邮件提供商根本不允许实时验证。此 "unknown"
情况的详细信息可在 smtp.error
和 mx.error
字段中找到。
库运行时卡住/耗时很长/1 分钟后没有任何显示。
大多数 ISP 会封锁通过 25 端口的出站 SMTP 请求,以防止垃圾邮件。check-if-email-exists
需要开放此端口以连接到邮箱的 SMTP 服务器,因此在这些 ISP 后无法工作,会一直挂起直到超时。这个问题没有简单的解决方法,请参见 这个 StackOverflow 帖子。一种解决方案是租用一个具有静态 IP 且没有端口限制的 Linux 云服务器,例如查看我们的自托管指南了解哪些云提供商开放 25 端口。
要详细查看二进制文件在后台的运行情况,请使用 RUST_LOG=debug
在详细模式下运行以查看日志。
我还有其他问题。
请随时查看 Reacher 的 FAQ。