Amaury b824e2c988 fix: Make new config backwards-compatible (#1567)
* fix: Make new config backwards-compatible

* fix test
2025-02-16 15:43:56 +01:00
2025-02-11 22:57:21 +01:00
2024-12-19 22:58:04 +00:00
2025-02-11 22:57:21 +01:00
2025-01-06 22:47:07 +01:00
2024-09-20 10:16:33 +02:00
2025-01-06 22:47:07 +01:00
2020-08-29 23:44:54 +02:00
2024-09-19 23:54:26 +02:00
2024-12-30 12:12:10 +01:00
2024-12-30 12:12:10 +01:00
2019-12-02 13:27:35 +01:00

Crate Docs Docker Actions Status



reacher

check-if-email-exists

Check if an email address exists without sending any email.
Comes with a ⚙️ HTTP backend.




👉 Live Demo: https://reacher.email

This is open-source, but I also offer a SaaS solution that has check-if-email-exists packaged in a nice friendly web interface. If you are interested, find out more at Reacher. If you have any questions, you can contact me at amaury@reacher.email.


Get Started

3 non-SaaS ways to get started with check-if-email-exists.

This option allows you to run a HTTP backend using Docker 🐳, on a cloud instance or your own server. Please note that outbound port 25 must be open.

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

Then send a POST http://localhost:8080/v0/check_email request with the following body:

{
    "to_email": "someone@gmail.com",
    "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
    },
}

2. Download the CLI [Full docs]

Note: The CLI binary doesn't connect to any backend, it checks the email directly from your computer.

Head to the releases page and download the binary for your platform.

> $ 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]

Check out the dedicated README.md for all options and flags.

3. Programmatic Usage [Full docs]

In your own Rust project, you can add check-if-email-exists in your Cargo.toml:

[dependencies]
check-if-email-exists = "0.9"

And use it in your code as follows:

use check_if_email_exists::{check_email, CheckEmailInput, CheckEmailInputProxy};

async fn check() {
    // Let's say we want to test the deliverability of someone@gmail.com.
    let mut input = CheckEmailInput::new(vec!["someone@gmail.com".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);
}

The reference docs are hosted on docs.rs.

✈️ JSON Output

The output will be a JSON with the below format, the fields should be self-explanatory. For someone@gmail.com (note that it is disabled by Gmail), here's the exact output:

{
	"input": "someone@gmail.com",
	"is_reachable": "invalid",
	"misc": {
		"is_disposable": false,
		"is_role_account": false,
		"is_b2c": true
	},
	"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
	}
}

What Does This Tool Check?

Included? Feature Description JSON field
✅ Email reachability How confident are we in sending an email to this address? Can be one of safe, risky, invalid or unknown. is_reachable
✅ Syntax validation Is the address syntactically valid? syntax.is_valid_syntax
✅ DNS records validation Does the domain of the email address have valid MX DNS records? mx.accepts_mail
✅ Disposable email address (DEA) validation Is the address provided by a known disposable email address provider? misc.is_disposable
✅ SMTP server validation Can the mail exchanger of the email address domain be contacted successfully? smtp.can_connect_smtp
✅ Email deliverability Is an email sent to this address deliverable? smtp.is_deliverable
✅ Mailbox disabled Has this email address been disabled by the email provider? smtp.is_disabled
✅ Full inbox Is the inbox of this mailbox full? smtp.has_full_inbox
✅ Catch-all address Is this email address a catch-all address? smtp.is_catch_all
✅ Role account validation Is the email address a well-known role account? misc.is_role_account
✅ Gravatar Url The url of the Gravatar email address profile picture misc.gravatar_url
✅ Have I Been Pwned? Has this email been compromised in a data breach? misc.haveibeenpwned
🔜 Free email provider check Is the email address bound to a known free email provider? Issue #89
🔜 Syntax validation, provider-specific According to the syntactic rules of the target mail provider, is the address syntactically valid? Issue #90
🔜 Honeypot detection Does email address under test hide a honeypot? Issue #91

🤔 Why?

Many online services (https://hunter.io, https://verify-email.org, https://email-checker.net) offer this service for a paid fee. Here is an open-source alternative to those tools.

License

check-if-email-exists's source code is provided under a dual license model.

Commercial license

If you want to use check-if-email-exists to develop commercial sites, tools, and applications, the Commercial License is the appropriate license. With this option, your source code is kept proprietary. Purchase a check-if-email-exists Commercial License at https://reacher.email/pricing.

Open source license

If you are creating an open-source application under a license compatible with the GNU Affero GPL License v3, you may use check-if-email-exists under the terms of the AGPL-3.0.

➡️ Read more about Reacher's license.

🔨 Build From Source

Build the CLI from source or the HTTP backend from source.

S
Description
Check if an email address exists without sending any email, written in Rust. Comes with a ⚙️ HTTP backend.
Readme
9.5 MiB
Languages
Rust 88.7%
PLpgSQL 5.8%
Shell 1.6%
HCL 1.6%
Dockerfile 1.2%
Other 1.1%