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]org".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)

    [email protected]:~/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) [email protected]:~$ ./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) [email protected]_server:~$ ./check_if_email_exists --http --http-host <MY_SERVER_IP>
    Listening on http://<MY_SERVER_IP>:3000
    

    then

    [email protected]:~/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

    • (proto) Don't kill a DnsExchangeBackground if a receiver is gone (see #1276) (@​djc) #1356
    • (proto) Take the current header truncated bit into account (@​ilaidlaw) #1384

    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

    • (proto) Don't kill a DnsExchangeBackground if a receiver is gone (see #1276) (@​djc) #1356
    • (proto) Take the current header truncated bit into account (@​ilaidlaw) #1384

    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 env_logger from 0.9.1 to 0.10.0

    chore: Bump env_logger from 0.9.1 to 0.10.0

    Bumps env_logger from 0.9.1 to 0.10.0.

    Release notes

    Sourced from env_logger's releases.

    v0.9.3

    Fix a regression from v0.9.2 where env_logger would fail to compile with the termcolor feature turned off.

    v0.9.2

    Fix and un-deprecate Target::Pipe, which was basically not working at all before and deprecated in 0.9.1.

    Changelog

    Sourced from env_logger's changelog.

    0.10.0 - 2022-11-24

    MSRV changed to 1.60 to hide optional dependencies

    Fixes

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

    Breaking Changes

    To open room for changing dependencies:

    • Renamed termcolor feature to color
    • Renamed atty feature to auto-color

    0.9.3 - 2022-11-07

    • Fix a regression from v0.9.2 where env_logger would fail to compile with the termcolor feature turned off.

    0.9.2 - 2022-11-07

    • Fix and un-deprecate Target::Pipe, which was basically not working at all before and deprecated in 0.9.1.

    0.9.0 -- 2022-07-14

    Breaking Changes

    • Default message format now prints the target instead of the module

    Improvements

    • Added a method to print the module instead of the target
    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 mailchecker from 5.0.3 to 5.0.4

    chore: Bump mailchecker from 5.0.3 to 5.0.4

    Bumps mailchecker from 5.0.3 to 5.0.4.

    Changelog

    Sourced from mailchecker's changelog.

    v5.0.4 (2022/11/27 10:53 +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 openssl from 0.10.42 to 0.10.43

    chore: Bump openssl from 0.10.42 to 0.10.43

    Bumps openssl from 0.10.42 to 0.10.43.

    Commits
    • 7db5cc7 Release openssl v0.10.43
    • d5037d4 Release openssl-sys v0.9.78
    • d43b2e1 Merge pull request #1736 from wiktor-k/improve-pkey-docs
    • 6c52dd4 Improve PKey documentation related to ed25519/ed448
    • 9ab49ba Fix lint error on clippy 1.65
    • b30313a Merge pull request #1710 from alexanderjordanbaker/X509VerifyTimeDepth
    • 2aed206 Merge pull request #1728 from wiktor-k/fix-elliptic
    • 520f6ef Fix reference to ECC
    • 0ba0c71 Merge pull request #1709 from wiktor-k/add-dsa-sig
    • 808b951 Add support for X509_VERIFY_PARAM_set_time and X509_VERIFY_PARAM_set_depth
    • 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
  • chore: Bump serde_json from 1.0.88 to 1.0.89

    chore: Bump serde_json from 1.0.88 to 1.0.89

    Bumps serde_json from 1.0.88 to 1.0.89.

    Release notes

    Sourced from serde_json's releases.

    v1.0.89

    • Fix invalid JSON incorrectly accepted when a large number has no digits after decimal point (#953)
    Commits
    • d2f9368 Release 1.0.89
    • 0b89836 Merge pull request #956 from dtolnay/decimal
    • 9d94e92 Require at least one digit after decimal point
    • c27b023 Add regression test for issue 953
    • 586fefb Resolve semicolon_if_nothing_returned pedantic clippy lint
    • See full diff 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
  • io: socks5 error: i/o error: failed to lookup address information: Name does not resolve

    io: socks5 error: i/o error: failed to lookup address information: Name does not resolve

    Email Provider

    [email protected]

    What happened?

    I am using AWS EC2 of instance Input -

    { "from_email": "[email protected]", "to_email": "[email protected]", "proxy": { "host": "string", "port": 0 } }

    Relevant log output

    {
        "input": "[email protected]",
        "is_reachable": "unknown",
        "misc": {
            "is_disposable": false,
            "is_role_account": false,
            "gravatar_url": null
        },
        "mx": {
            "accepts_mail": true,
            "records": [
                "aspmx3.googlemail.com.",
                "aspmx.l.google.com.",
                "alt1.aspmx.l.google.com.",
                "alt2.aspmx.l.google.com.",
                "aspmx2.googlemail.com."
            ]
        },
        "smtp": {
            "error": {
                "type": "SmtpError",
                "message": "io: socks5 error: i/o error: failed to lookup address information: Name does not resolve"
            }
        },
        "syntax": {
            "address": "[email protected]",
            "domain": "level.game",
            "is_valid_syntax": true,
            "username": "kushagra1",
            "normalized_email": "[email protected]",
            "suggestion": null
        }
    }
    
    opened by kushagraagent47 3
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 Nov 27, 2022
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 4, 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.7k Nov 28, 2022
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 31 Nov 6, 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 31 Nov 6, 2022
新しい 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 84 Nov 20, 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 Dec 4, 2022
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) 148 Nov 6, 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 215 Nov 17, 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 151 Nov 21, 2022
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
A CLI tool to convet Hex color code or RGB to color code, RGB, HSL and color name(if exists)

iro -色- A CLI tool to convert the hex color code or RGB to color code, RGB, HSL, color name(if exists, according to jonathantneal/color-names). Usage

Kyohei Uto 2 Aug 10, 2022
A Discord bot for sending GeoGuessr challenge links that uses the GeoGuessr API written in rust.

GeoGuessr-bot-rs This is a simple implementation of a discord bot that send GeoGuessr-challenge links on demand. Features: Slash-commands Lightning-fa

Luukas Pörtfors 6 Nov 18, 2022
Standard Graphics is a command-line tool for printing 2D graphics from any language to any screen.

2D graphics in any programming language with just print statements!

Caleb Winston 123 Nov 20, 2022
dm-jitaux is a Rust-based JIT compiler using modified auxtools, dmasm and Inkwell LLVM wrapper for boosting Byond DM performance without any hassle!

dm-jitaux is a Rust-based JIT compiler using modified auxtools, dmasm and Inkwell LLVM wrapper for boosting Byond DM performance without any hassle (such as rewriting/refactroing your DM code).

SS220 19 Aug 18, 2022
messloc is a drop in replacement for malloc that can transparently recover from memory fragmentation without any changes to application code.

messloc is a drop in replacement for malloc that can transparently recover from memory fragmentation without any changes to application code. Goals Al

null 10 Nov 2, 2022