#smtp #verification #mx

check-if-email-exists

在不发送任何电子邮件的情况下检查电子邮件地址是否存在

38个版本

0.9.1 2023年10月10日
0.9.0 2022年8月15日
0.8.32 2022年8月13日
0.8.30 2022年6月2日
0.5.0 2019年11月16日

#9 in 电子邮件

Download history 449/week @ 2024-03-13 560/week @ 2024-03-20 414/week @ 2024-03-27 514/week @ 2024-04-03 535/week @ 2024-04-10 584/week @ 2024-04-17 759/week @ 2024-04-24 580/week @ 2024-05-01 530/week @ 2024-05-08 554/week @ 2024-05-15 443/week @ 2024-05-22 370/week @ 2024-05-29 521/week @ 2024-06-05 601/week @ 2024-06-12 474/week @ 2024-06-19 456/week @ 2024-06-26

2,117每月下载次数
用于 4 个crates(3个直接使用)

AGPL-3.0

115KB
2K SLoC

Crate Docs Docker Actions Status



reacher

check-if-email-exists

在不发送任何电子邮件的情况下检查电子邮件地址是否存在。
附带 ⚙️ HTTP后端




👉 在线演示: https://reacher.email

这是一个开源项目,但我还提供了一种 SaaS 解决方案,它将 check-if-email-exists 打包在一个友好的Web界面中。如果您感兴趣,请访问 Reacher 获取更多信息。如果您有任何问题,可以发送邮件至 [email protected]


入门

三种非SaaS方式开始使用 check-if-email-exists

此选项允许您在云实例或自己的服务器上使用Docker 🐳 运行HTTP后端。请注意,必须打开出站端口25。

docker run -p 8080:8080 reacherhq/backend:latest

然后发送以下内容的 POST http://localhost:8080/v0/check_email 请求

{
    "to_email": "[email protected]",
    "from_email": "[email protected]", // (optional) email to use in the `FROM` SMTP command, defaults to "[email protected]"
    "hello_name": "my-server.com",    // (optional) name to use in the `EHLO` SMTP command, defaults to "localhost"
    "proxy": {                        // (optional) SOCK5 proxy to run the verification through, default is empty
        "host": "my-proxy.io",
        "port": 1080,
        "username": "me",             // (optional) Proxy username
        "password": "pass"            // (optional) Proxy password
    },
    "smtp_port": 587                  // (optional) SMTP port to do the email verification, defaults to 25
}

2. 下载CLI [完整文档]

注意:CLI二进制文件不连接到任何后端,它直接从您的计算机检查电子邮件。

前往 发布页面 并下载适合您平台的二进制文件。

> $ check_if_email_exists --help
check_if_email_exists 0.9.1
Check if an email address exists without sending an email.

USAGE:
    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() {
    // Let's say we want to test the deliverability of [email protected].
    let mut input = CheckEmailInput::new(vec!["[email protected]".into()]);

    // Verify this email, using async/await syntax.
    let result = check_email(&input).await;

    // `result` is a `Vec<CheckEmailOutput>`, where the CheckEmailOutput
    // struct contains all information about our email.
    println!("{:?}", result);
}

参考文档托管在 docs.rs

✈️ JSON输出

输出将是一个以下格式的JSON,字段应易于理解。对于 someone@gmail.com(注意,Gmail已禁用),以下是确切的输出

{
	"input": "[email protected]",
	"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字段
电子邮件可达性 我们发送电子邮件到这个地址有多大的信心?可以是 saferiskyinvalidunknown 之一。 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 URL 电子邮件地址配置文件图片的Gravatar URL misc.gravatar_url
🔜 免费电子邮件提供商检查 这个电子邮件地址是否绑定到已知的免费电子邮件提供商? 问题 #89
🔜 语法验证,特定于提供商 根据目标邮件提供商的语法规则,地址的语法是否有效? 问题 #90
🔜 蜜罐检测 正在测试的电子邮件地址是否隐藏了一个蜜罐 问题 #91
🔜 我是否被泄露过? 这个电子邮件是否在数据泄露中受到损害? 问题 #289

🤔 为什么?

许多在线服务(https://hunter.iohttps://verify-email.orghttps://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.errormx.error字段。

库在1分钟后挂起/运行时间过长/没有任何显示。

大多数ISP通过端口25阻止出站SMTP请求,以防止垃圾邮件。check-if-email-exists需要此端口打开以连接到电子邮件的SMTP服务器,因此在这些ISP后面无法工作,并将挂起,直到超时。遗憾的是,没有简单的解决方案,例如查看此StackOverflow线程。一种解决方案是租用一个带有静态IP和未阻止端口的Linux云服务器,例如,查看我们的自托管指南,了解哪些云提供商打开端口25。

要详细了解二进制文件在后台执行的操作,请以详细模式运行,使用RUST_LOG=debug查看日志。

我还有另一个问题。

请随意查看Reacher的常见问题解答

🔨 从源代码构建

从源代码构建命令行界面或从源代码构建HTTP后端

依赖项

~18–36MB
~542K SLoC