<br /><br />
<p align="center"><img align="center" src="https://yellow-cdn.veclightyear.com/835a84d5/c6bed5e5-daf1-41d8-a4ad-b0aedf4d21e9.svg" height="96" alt="reacher" /></p> <h1 align="center">check-if-email-exists</h1> <h4 align="center">无需发送任何邮件即可检查电子邮件地址是否存在。<br/>附带<a href="./backend">⚙️ HTTP 后端</a>。</h4><br /><br /><br />
这是开源项目,但我也提供了一个 SaaS 解决方案,将 check-if-email-exists
打包在一个友好的网页界面中。如果您感兴趣,可以在 Reacher 了解更多信息。如有任何问题,可以通过 amaury@reacher.email 联系我。
使用 check-if-email-exists
的 3 种非 SaaS 方式。
此选项允许您使用 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 }
注意:CLI 二进制文件不连接任何后端,它直接从您的计算机检查电子邮件。
前往发布页面并下载适用于您平台的二进制文件。
> $ check_if_email_exists --help check_if_email_exists 0.9.1 无需发送邮件即可检查电子邮件地址是否存在。 用法: check_if_email_exists [FLAGS] [OPTIONS] [TO_EMAIL]
查看专用 README.md了解所有选项和标志。
在您自己的 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,字段应该是自解释的。对于 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