Check if an email address exists without sending any email, written in Rust.

Overview

Crate Docs Actions Status Travis Appveyor Github Sponsor




check-if-email-exists

Check if an email address exists without sending any email.




πŸ‘‰ Live Demo: https://reacher.email

hookdoo

If you don't have time to waste configuring, hosting, debugging and maintaining your own email verifier, we offer a SaaS solution that has all of the capabilities check-if-email-exists provides, plus a lot more, and all that 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 [email protected].


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
πŸ”œ 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
πŸ”œ Gravatar Does this email address have a Gravatar profile picture? Issue #92
πŸ”œ Have I Been Pwned? Has this email been compromised in a data breach? Issue #289

πŸ€” 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 an 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.

Try It Yourself

There are 5 ways you can try check-if-email-exists.

1. Use the Hosted Version: https://reacher.email πŸ₯‡

Reacher is a simple SaaS using this library, also open-source!

If you would like a high free tier to test Reacher, consider sponsoring me! You'll get 8000 free email verifications every month, and a this contribution would mean A WHOLE LOT to me.

2. One-Click Deploy to Heroku

Reacher provides a fully-fledged REST backend at https://github.com/reacherhq/backend. It is the same backend running for our main product https://reacher.email.

The beckend is built using the fast web framework warp, and exposes an API endpoint for making email verifications.

For an one-click deploy to Heroku, click on the purple Heroku button at reacherhq/backend.

3. Use Docker

The Docker image is hosted on Docker Hub: https://hub.docker.com/r/reacherhq/check-if-email-exists.

To run it, run the following command:

docker run -p 3000:3000 reacherhq/check-if-email-exists

You can then send a POST request with the following body to http://localhost:3000 to test multiple emails at once:

{
	"to_emails": ["[email protected]"]
}

Here's the equivalent curl command:

curl -X POST -d'{"to_emails":["[email protected]"]}' http://localhost:3000

Optionally, you can also pass in from_email and hello_name fields into the JSON object, see the help message below to understand their meanings.

4. Download the Binary

Note: The 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. Make sure you have openssl installed on your local machine.

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

USAGE:
    check_if_email_exists [FLAGS] [OPTIONS] [TO_EMAIL]

FLAGS:
        --http       Runs a HTTP server.
    -h, --help       Prints help information
    -V, --version    Prints version information

OPTIONS:
        --from-email           The email to use in the `MAIL FROM:` SMTP command. [default:
                                           [email protected]]
        --hello-name           The name to use in the `EHLO:` SMTP command. [default: localhost]
        --http-host                  Sets the host IP address on which the HTTP server should bind. Only used when
                                           `--http` flag is on. [default: 127.0.0.1]
        --http-port                  Sets the port on which the HTTP server should bind. Only used when `--http`
                                           flag is on. If not set, then it will use $PORT, or default to 3000.
        --proxy-host           Use the specified SOCKS5 proxy host to perform email verification.
        --proxy-port           Use the specified SOCKS5 proxy port to perform email verification. Only used
                                           when `--proxy-host` flag is set. [default: 1080]
        --yahoo-use-api     For Yahoo email addresses, use Yahoo's API instead of connecting directly to
                                           their SMTP servers. [default: true]

ARGS:
        The email to check.

If you run with the --http flag, check-if-email-exists will serve a HTTP server on http://localhost:3000. You can then send a POST request with the following body to test multiple emails at once:

{
	"to_emails": ["[email protected]"]
}

Here's the equivalent curl command:

curl -X POST -d'{"to_emails":["[email protected]"]}' http://localhost:3000

Optionally, you can also pass in from_email and hello_name fields into the JSON object, see the help message above to understand their meanings.

πŸ’‘ PRO TIP: To show debug logs when running the binary, run:

RUST_LOG=debug check_if_email_exists [FLAGS] [OPTIONS] [TO_EMAIL]

5. Usage as a Rust Library

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

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

And use it in your code as follows:

`, where the CheckEmailOutput // struct contains all information about our email. println!("{:?}", result); } ">
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()]);

    // Optionally, we can also tweak the configuration parameters used in the
    // verification.
    input
        .set_from_email("[email protected]".into()) // Used in the `MAIL FROM:` command
        .set_hello_name("example.org".into())    // Used in the `EHLO` command
        .set_proxy(CheckEmailInputProxy {         // Use a SOCKS5 proxy to verify the email
            host: "my-proxy.io".into(),
            port: 1080
        });

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

    // `result` is a `Vec`, 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 [email protected] (note that it is disabled by Gmail), here's the exact output:

{
	"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"
	}
}

You can also take a look at the documentation of this JSON object.

❓ FAQ

What does is_reachable: "unknown" mean?

This means that the server does not allow real-time verification of an email right now. It may happen for multiple reasons: your IP is blacklisted, the SMTP port 25 is blocked, the email account is momentarily receiving too many emails (spam protection)... or the email provider simply does not allow real-time verification at all. The details of this "unknown" case can be found in the smtp.error and mx.error fields.

The library hangs/takes a long time/doesn't show anything after 1 minute.

Most ISPs block outgoing SMTP requests through port 25, to prevent spam. check-if-email-exists needs to have this port open to make a connection to the email's SMTP server, so won't work behind these ISPs, and will instead hang until it times out. There's unfortunately no easy workaround for this problem, see for example this StackOverflow thread. One solution is to rent a Linux cloud server with a static IP and no blocked ports, see for example our Deploy to Heroku section.

To see in details what the binary is doing behind the scenes, run it in verbose mode to see the logs.

I have another question

Feel free to check out Reacher's FAQ.

πŸ”¨ Build From Source

First, install Rust; you'll need Rust 1.37.0 or later. Then, run the following commands:

# Download the code
$ git clone https://github.com/reacherhq/check-if-email-exists
$ cd check-if-email-exists

# Build in release mode
$ cargo build --release

# Run the binary
$ ./target/release/check_if_email_exists --help

Legacy Bash Script

The 1st version of this tool was a simple bash script which made a telnet call. If you would like to use that simpler version, have a look at the legacy branch. The reasons for porting the bash script to the current codebase are explained in issue #4.

Comments
  • feat: add Outlook HTTP API validation

    feat: add Outlook HTTP API validation

    • check the validity of Outlook/Office 365 email addresses via the method outlined here.
    • run only via the --outlook-use-api flags (defaulting to false.)

    relates #937

    opened by PsypherPunk 12
  • Catch All parse failed

    Catch All parse failed

    Hey, I'm getting an error that I think could be avoided.

    For outlook server sometimes I get this return: image

    If I'm not wrong, this is a catch all return, am I right?

    Thanks.

    opened by marcelinhov2 8
  • Is the binary less accurate than running on server (via docker)?

    Is the binary less accurate than running on server (via docker)?

    Repo readme comment:

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

    Is the docker version running on server with open SMTP port more accurate?

    Are there best practices on how to make the responses more accurate? Some ideas I had (not sure if these are worth doing)

    • set the "FROM" email / domain with MX record pointing to the IP where the docker is running
    • checking against spamhaus / RBL to see if IP or from email you're using is blacklisted
    • round-robbin SMTP servers if doing bulk check (like variations [email protected], [email protected] ,[email protected], etc)
    opened by taewookim 7
  • Serverless version of this service

    Serverless version of this service

    To mimic the service proposed by the websites mentioned in the README, it would be good to have an endpoint that takes an email in a query parameter as input, and outputs true/false.

    I have never tried serverless, but I think it would fit here, i.e. no need to code a web server in Rust, just a function that takes a HTTP request in input, and outputs a HTTP response.

    Some requirements about this serverless platform:

    • supports Rust, obviously
    • is free (or at least has a free tier)
    • SMTP ports open

    Some possible solutions:

    • AWS lambda (they have a Rust runtime https://aws.amazon.com/blogs/opensource/rust-runtime-for-aws-lambda/)
    • ~Zeit: they already propose serverless Docker, but it's not ideal, so probably better to wait for the serverless lambda functions with Rust: https://twitter.com/rauchg/status/1076150773099126784~ Not possible: https://spectrum.chat/thread/25377e2c-fdd4-44c2-ae45-70751e9f5db6
    • serverless.com with https://github.com/softprops/serverless-rust
    • apex http://apex.run/
    T:enhancement 
    opened by amaurym 7
  • gmx.com emails are all unknown

    gmx.com emails are all unknown

    From https://reacher.email/:

    [email protected]
    
    {
      "input": "[email protected]",
      "is_reachable": "unknown",
      "misc": {
        "is_disposable": false,
        "is_role_account": false
      },
      "mx": {
        "accepts_mail": true,
        "records": [
          "mx01.gmx.net.",
          "mx00.gmx.net."
        ]
      },
      "smtp": {
        "error": {
          "type": "SmtpError",
          "message": "io: incomplete"
        }
      },
      "syntax": {
        "address": "[email protected]",
        "domain": "gmx.com",
        "is_valid_syntax": true,
        "username": "any"
      }
    }
    

    Any other @gmx.com address acts similarly.

    opened by tyranron 6
  • Disposable emails not being labelled as disposable AND cannot set http_host

    Disposable emails not being labelled as disposable AND cannot set http_host

    (Temporary email from 10minutemail.com)

    when i run from desktop via binary (latest)

    osboxes@osboxes:~/check_email$ ./check_if_email_exists [email protected]
    [
      {
        "input": "[email protected]",
        "is_reachable": "unknown",
        "misc": {
          "is_disposable": false,
          "is_role_account": false
        },
        "mx": {
          "accepts_mail": true,
          "records": [
            "127.0.0.1."
          ]
        },
        "smtp": {
          "error": {
            "type": "SmtpError",
            "message": "io: could not resolve address `(\"127.0.0.1.\", 25)`"
          }
        },
        "syntax": {
          "address": "[email protected]",
          "domain": "twzhhq.online",
          "is_valid_syntax": true,
          "username": "rcddrychzofinvvqwi"
        }
      }
    ]
    
    

    when i run binary file (i.e. command line) from a VPS with open port 25:

    (env) django@gsf-rq-v11:~$ ./check_if_email_exists  "[email protected]"
    [
      {
        "input": "[email protected]",
        "is_reachable": "unknown",
        "misc": {
          "is_disposable": false,
          "is_role_account": false
        },
        "mx": {
          "accepts_mail": true,
          "records": [
            "127.0.0.1."
          ]
        },
        "smtp": {
          "error": {
            "type": "SmtpError",
            "message": "io: could not resolve address `(\"127.0.0.1.\", 25)`"
          }
        },
        "syntax": {
          "address": "[email protected]",
          "domain": "twzhhq.online",
          "is_valid_syntax": true,
          "username": "rcddrychzofinvvqwi"
        }
      }
    ]
    

    when i run as HTTP server and curl'ing it:

    (env) django@da_server:~$ ./check_if_email_exists --http --http-host <MY_SERVER_IP>
    Listening on http://<MY_SERVER_IP>:3000
    

    then

    osboxes@osboxes:~/check_email$ curl -X POST -d'{"to_emails":["[email protected]"]}' http://<MY_SERVER_IP>:3000
    

    results:

    [
      {
        "input": "[email protected]",
        "is_reachable": "unknown",
        "misc": {
          "is_disposable": false,
          "is_role_account": false
        },
        "mx": {
          "accepts_mail": true,
          "records": [
            "127.0.0.1."
          ]
        },
        "smtp": {
          "error": {
            "type": "SmtpError",
            "message": "io: could not resolve address `(\"127.0.0.1.\", 25)`"
          }
        },
        "syntax": {
          "address": "[email protected]",
          "domain": "twzhhq.online",
          "is_valid_syntax": true,
          "username": "rcddrychzofinvvqwi"
        }
      }
    ]
    

    "http_host" (when run as http server) doesn't seem to reflect in the JSON output.

    opened by taewookim 6
  • chore(deps): Bump trust-dns-proto from 0.20.0 to 0.20.2

    chore(deps): Bump trust-dns-proto from 0.20.0 to 0.20.2

    ⚠️ Dependabot Preview has been deactivated ⚠️

    This pull request was created by Dependabot Preview, and you've upgraded to Dependabot. This means it won't respond to dependabot commands nor will it be automatically closed if a new version is found.

    If you close this pull request, Dependabot will re-create it the next time it checks for updates and everything will work as expected.


    Bumps trust-dns-proto from 0.20.0 to 0.20.2.

    Release notes

    Sourced from trust-dns-proto's releases.

    Fix panic in SVCB

    0.20.2

    Fixed

    • (proto) Panic on bad length in SVCB for record length #1465

    Name parsing improvements

    0.20.1

    Added

    Fixed

    Changed

    Changelog

    Sourced from trust-dns-proto's changelog.

    0.20.2

    Fixed

    • (proto) Panic on bad length in SVCB for record length #1465

    0.20.1

    Added

    Fixed

    Changed

    Commits
    • 9015c8e prepare 0.20.2 release
    • f8ea42e fix formatting
    • 1fdd54e fix clippy warnings
    • e37f71c Fix panic on bad length for SVCB record
    • 7965b90 update deps
    • a1c91f1 prepare 0.20.1 release
    • 92228f2 remove track caller until upgrade to 1.46
    • 1013ce4 fix doc-tests for MessageParts
    • eee2f5e add zone file parsing for SVCB and HTTPS
    • 817f725 add decoders and encoders for SvcParamValues
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.

    If all status checks pass Dependabot will automatically merge this pull request.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Automerge options (never/patch/minor, and dev/runtime dependencies)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 5
  • Create a SAAS out of this tool? πŸ€”

    Create a SAAS out of this tool? πŸ€”

    I've been tinkering about this idea:

    There are tons of tools out there with the same goal (xverify, EmailListVerify, The Checker, ZeroBounce, etc...), but afaik they all somehow store the results in a DB.

    I'm thinking of creating an email verification SAAS alternative, with a tiny backend database1, a focus on privacy, and open-source. It would be a paid service for larger volume, but there will always be a free tier - similar to what the forementioned services provide.

    Put a thumbs up/down if you think this is a good idea or not.

    Status update: it's done πŸŽ‰ https://reacher.email

    1: The backend will store the user accounts, manage payments, keep track of their remaining "credits" to verify more emails... But it will never store the actual emails or their deliverability results.

    T:question 
    opened by amaurym 5
  • Invalid sender email

    Invalid sender email

    Some mail providers check validity of sender address, and the current script fails for <[email protected]> in https://github.com/amaurymartiny/check-if-email-exists/blob/50a4628f849c8126d0ceea1a89fe2a2580abd7fb/expectTelnet.exp#L13

    Output of telnet

    example 1
    $ telnet *.*.*.* 587
    Trying *.*.*.*...
    Connected to *.*.*.*.
    Escape character is '^]'.
    220 *.*.*.* ESMTP
    > HELO Hi  
    250 *.*.*.*
    > MAIL FROM: <[email protected]>
    250 2.1.0 Ok
    > RCPT TO: <*@*.*.*>
    450 4.1.8 <[email protected]>: Sender address rejected: Domain not found
    > QUIT
    221 2.0.0 Bye
    Connection closed by foreign host.
    
    example 2
    $ telnet *.*.* 587
    Trying *.*.*.*...
    Connected to *.*.*.
    Escape character is '^]'.
    220-*.*.* ESMTP Exim 4.91 #1 Tue, 04 Sep 2018 18:57:07 +* 
    220-We do not authorize the use of this system to transport unsolicited, 
    220 and/or bulk e-mail.
    > HELO Hi
    250 *.*.* Hello Hi [*.*.*.*]
    > MAIL FROM: <[email protected]>
    250 OK
    > RCPT TO: <*@*.*>
    550-Verification failed for <[email protected]>
    550-The mail server could not deliver mail to [email protected].  The account or domain may not exist, they may be blacklisted, or missing the proper dns entries.
    550 Sender verify failed
    > QUIT
    221 *.*.* closing connection
    Connection closed by foreign host.
    

    Script output

    example 2
    $ ./checkEmail.sh *@*.*
    send: spawn id exp6 not open
        while executing
    "send "RCPT TO: <$email>\r""
        (file "expectTelnet.exp" line 15)
    false
    
    opened by hadisfr 5
  • function `check_single_email` is private

    function `check_single_email` is private

    First of all, thanks a lot for this amazing crate. It does exactly what I was about to implement. I wonder if there are any good reasons to keep the function check_single_email private. I need something similar in my use case. Would it be helpful to submit a PR to make it public?

    opened by robsonfs 4
  • Application error after new deployment on Heroku

    Application error after new deployment on Heroku

    I deployed app on Heroku but after installation, I received Application error message, while accessing it on the URL along with following message

    An error occurred in the application and your page could not be served. If you are the application owner, check your logs for details. You can do this from the Heroku CLI with the command heroku logs --tail

    I would appreciate any help.

    Thank you.

    opened by ashokque 4
  • chore: Bump mailchecker from 5.0.5 to 5.0.6

    chore: Bump mailchecker from 5.0.5 to 5.0.6

    Bumps mailchecker from 5.0.5 to 5.0.6.

    Changelog

    Sourced from mailchecker's changelog.

    v5.0.6 (2022/12/30 22:36 +00:00)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • chore: Bump once_cell from 1.16.0 to 1.17.0

    chore: Bump once_cell from 1.16.0 to 1.17.0

    Bumps once_cell from 1.16.0 to 1.17.0.

    Changelog

    Sourced from once_cell's changelog.

    1.17.0

    • Add race::OnceRef for storing a &'a T.
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • chore: Bump serde from 1.0.150 to 1.0.152

    chore: Bump serde from 1.0.150 to 1.0.152

    Bumps serde from 1.0.150 to 1.0.152.

    Release notes

    Sourced from serde's releases.

    v1.0.152

    • Documentation improvements

    v1.0.151

    • Update serde::{ser,de}::StdError to re-export core::error::Error when serde is built with feature="std" off and feature="unstable" on (#2344)
    Commits
    • ccf9c6f Release 1.0.152
    • b25d0ea Link to Hjson data format
    • 4f4557f Link to bencode data format
    • bf400d6 Link to serde_tokenstream data format
    • 4d2e36d Wrap flexbuffers bullet point to 80 columns
    • df6310e Merge pull request #2347 from dtolnay/docsrs
    • 938ab5d Replace docs.serde.rs links with intra-rustdoc links
    • ef5a0de Point documentation links to docs.rs instead of docs.serde.rs
    • 5d186c7 Opt out -Zrustdoc-scrape-examples on docs.rs
    • 44bf363 Release 1.0.151
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Sometimes emails retun safe then they return risky

    Sometimes emails retun safe then they return risky

    Email Provider

    [email protected]

    What happened?

    Sent a validation request

    {
        "to_email": "[email protected]"
    }
    

    got a safe response at the first try got risky the second try

    Relevant log output

    No response

    opened by virgincodes 0
  • chore: Bump clap from 3.2.17 to 4.0.27

    chore: Bump clap from 3.2.17 to 4.0.27

    Bumps clap from 3.2.17 to 4.0.27.

    Release notes

    Sourced from clap's releases.

    v4.0.26

    [4.0.26] - 2022-11-16

    Fixes

    • (error) Fix typos in ContextKind::as_str

    v4.0.25

    [4.0.25] - 2022-11-15

    Features

    • (error) Report available subcommands when required subcommand is missing

    v4.0.24

    [4.0.24] - 2022-11-14

    Fixes

    • Avoid panic when printing an argument that isn't built

    v4.0.23

    [4.0.23] - 2022-11-11

    Fixes

    • Don't panic on reporting invalid-long errors when followed by invalid UTF8
    • (help) Clarified argument to help subcommand

    v4.0.22

    [4.0.22] - 2022-11-07

    Fixes

    • (help) Don't overflow into next-line-help early due to stale (pre-v4) padding calculations

    v4.0.21

    [4.0.21] - 2022-11-07

    Features

    • (derive) long_about and long_help attributes, without a value, force using doc comment (before it wouldn't be set if there wasn't anything different than the short help)

    v4.0.20

    [4.0.20] - 2022-11-07

    Fixes

    • (derive) Allow defaulted value parser for '()' fields

    ... (truncated)

    Changelog

    Sourced from clap's changelog.

    [4.0.27] - 2022-11-24

    Features

    • Have Arg::value_parser accept Vec<impl Into<PossibleValue>>
    • Implement Display and FromStr for ColorChoice

    Fixes

    • Remove soundness issue by switching from atty to is-terminal

    [4.0.26] - 2022-11-16

    Fixes

    • (error) Fix typos in ContextKind::as_str

    [4.0.25] - 2022-11-15

    Features

    • (error) Report available subcommands when required subcommand is missing

    [4.0.24] - 2022-11-14

    Fixes

    • Avoid panic when printing an argument that isn't built

    [4.0.23] - 2022-11-11

    Fixes

    • Don't panic on reporting invalid-long errors when followed by invalid UTF8
    • (help) Clarified argument to help subcommand

    [4.0.22] - 2022-11-07

    Fixes

    • (help) Don't overflow into next-line-help early due to stale (pre-v4) padding calculations

    [4.0.21] - 2022-11-07

    Features

    • (derive) long_about and long_help attributes, without a value, force using doc comment (before it wouldn't be set if there wasn't anything different than the short help)

    [4.0.20] - 2022-11-07

    ... (truncated)

    Commits
    • 3262016 chore: Release
    • 757f95b docs: Update changelog
    • 20e02eb Merge pull request #4509 from epage/possible
    • fb1d960 Merge pull request #4249 from jcgruenhage/replace-atty
    • 94aca92 feat: Create ValueParser from Vec<PossibleValue>
    • 3bccfce docs: Clarify PossibleValue is likely not needed
    • 19981a2 docs: Clarify ColorChoice impls ValueEnum
    • 8d92f3e feat: Add Display/FromStr to ColorChoice
    • ed683ef fix: Always expose ColorChoice
    • 789bfd6 Merge pull request #4508 from epage/style
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
Releases(v0.9.0)
Owner
Reacher
Check if an email exists without sending any email.
Reacher
Pay a lightning email to send an email to the website owner

TODO USE human readable age in encryption (support "e" as backward compatible) go back to referrer or provided option save time taken to send email op

Riccardo Casatta 12 Aug 24, 2022
πŸ“«Himalaya: CLI email client written in Rust.

??Himalaya: CLI email client written in Rust.

ClΓ©ment DOUIN 2.1k Jan 7, 2023
Rust implementation of catapulte email sender

Catapulte What is catapulte? Catapulte is an open source mailer you can host yourself. You can use it to quickly catapult your transactionnal emails t

JΓ©rΓ©mie Drouet 108 Dec 14, 2022
This app reads a csv file and sends an email with a formatted Handlebars file.

Bulkmail This app reads a csv file and sends an email with a formatted Handlebars file. This can be run on Linux for AMD64 and ARMv7. Upstream Links D

Giovanni Bassi 17 Nov 3, 2022
Mjml - the only framework that makes responsive-email easy

MJML 4 If you're looking for MJML 3.3.X check this branch | Translated documentation | Introduction | Installation | Usage | Translated documentation

MJML 14.8k Jan 6, 2023
mail-builder is a flexible e-mail builder library written in Rust that generates RFC5322 compliant e-mail messages

mail-builder mail-builder is a flexible e-mail builder library written in Rust that generates RFC5322 compliant e-mail messages. The library has full

Stalwart Labs 37 Dec 19, 2022
A mail suite written in rust meant to be easy to use.

Erooster A mail suite written in rust meant to be easy to use. Getting started Currently the setup is quite rough. You need some certificates for your

Marcel 33 Dec 19, 2022
An ESMTP server library written in Rust.

rs-smtp An ESMTP server library written in Rust. Features ESMTP client & server implementing RFC 5321 Support for SMTP AUTH and PIPELINING UTF-8 suppo

DUNEF 3 Apr 15, 2023
新しい IMAP client in Rust

新しい IMAP client 新しい (atarashii/new) IMAP client in Rust. It supports plain and secure connections. In progress It's under development... Usage Put thi

Alex Maslakov 39 Sep 13, 2020
Unofficial Rust library for the SendGrid API

sendgrid-rs Unofficial Rust library for the SendGrid API. This crate requires Rust 1.15 or higher as it uses a crate that has a custom derive implemen

Garrett Squire 88 Dec 27, 2022
a mailer library for Rust

lettre A mailer library for Rust NOTE: this readme refers to the 0.10 version of lettre, which is still being worked on. The master branch and the alp

lettre 1.3k Jan 4, 2023
Rust library to parse mail files

mailparse A simple parser for MIME email messages. API The primary entry point for this library is the following function: parse_mail(&[u8]) -> Re

Kartikaya Gupta (kats) 150 Dec 27, 2022
Implementation of mjml in rust

MRML Introduction This project is a reimplementation of the nice MJML markup language in Rust. How to use it use mrml; fn main() { match mrml::to

JΓ©rΓ©mie Drouet 228 Dec 28, 2022
Fast and robust e-mail parsing library for Rust

mail-parser mail-parser is an e-mail parsing library written in Rust that fully conforms to the Internet Message Format standard (RFC 5322), the Multi

Stalwart Labs 158 Jan 1, 2023
A rewrite of the server side parts of emersion/go-smtp package into rust.

rust-smtp-server A rust smtp server library. It's mainly a rewrite of the server side parts of the emersion/go-smtp library. Features Usage Add this t

Nick Westendorf 3 Apr 26, 2023
E-mail delivery library for Rust with DKIM support

mail-send mail-send is a Rust library to build, sign and send e-mail messages via SMTP. It includes the following features: Generates e-mail messages

Stalwart Labs 165 Oct 23, 2023
A Python package written in Rust for email verification without sending any emails.

PyRustify PyRustify is a Python package written in Rust that verifies the email addresses. Features Feature Description Syntax validation Checks if th

Mng 8 Apr 16, 2023
Automatically check for SPF misconfigurations that could result in email spoofing

SPFJack Email spoofing is dead, but misconfiguration never dies. Purpose This project is designed to take in domain names and review their SPF records

Alex (LunarCA) 2 Mar 27, 2022
Pay a lightning email to send an email to the website owner

TODO USE human readable age in encryption (support "e" as backward compatible) go back to referrer or provided option save time taken to send email op

Riccardo Casatta 12 Aug 24, 2022
Let's pretend that life-before-main exists for Rust targeting WebAssembly

Let's pretend that life-before-main exists for Rust targeting WebAssembly. Installation Add a dependency on wasm-init. This crate intentionally provid

Ruan Pearce-Authers 7 Aug 29, 2023