explaingit

reacherhq/check-if-email-exists

8,700RustAudience · developerComplexity · 3/5Setup · moderate

TLDR

A self-hosted tool that checks whether an email address is real and deliverable, without sending a test email, by checking format, DNS records, and mail server responses, returning a clear safe/risky/invalid verdict.

Mindmap

mindmap
  root((repo))
    What it does
      Email validation
      Reachability check
    Checks
      Format validation
      DNS MX lookup
      Mailbox probe
      Disposable detection
    Usage
      Docker HTTP API
      CLI tool
      Rust library
    Verdicts
      Safe
      Risky
      Invalid
      Unknown
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Validate email addresses on a sign-up form before saving them to your database to avoid bad data.

USE CASE 2

Clean a mailing list by filtering out invalid, disposable, and catch-all addresses before sending a campaign.

USE CASE 3

Run the Docker container as a microservice that any backend application can query to verify emails via HTTP.

USE CASE 4

Add the Rust library directly to a Rust project to perform email reachability checks in-process.

Tech stack

RustDocker

Getting it running

Difficulty · moderate Time to first run · 30min

Requires outbound port 25 to be open, most cloud providers block it by default, so an SMTP proxy service is recommended for any real volume.

In plain English

This project lets you check whether an email address is real and deliverable without actually sending an email to it. That matters for anyone building a sign-up form, a mailing list, or any system that collects email addresses, because sending to bad addresses wastes money and harms your sender reputation with email providers. The tool works by running several checks in sequence. It first looks at whether the address is formatted correctly. Then it looks up the domain's mail server records to see if the domain can receive email at all. After that, it tries to open a connection with that mail server and asks whether the specific mailbox exists. It also checks whether the address belongs to a disposable email provider (the kind people use to sign up and then throw away), whether the inbox is full, and whether the address is a catch-all (meaning the server accepts everything regardless of whether the mailbox is real). All results come back as a structured JSON object with a clear reachability verdict: safe, risky, invalid, or unknown. You can use it in three ways. The most popular option is running a prebuilt Docker container that exposes an HTTP API, so any application can send a request and get a JSON result back. There is also a command-line tool you can download and run on your own machine. If you are building something in Rust specifically, you can add the library directly to your project and call it from your code. The project is written in Rust, a language chosen for speed and reliability. It is open source and available as a self-hosted tool, so you run it on your own server rather than sending email addresses to a third party. The same team also offers a paid hosted version called Reacher if you prefer not to manage the infrastructure yourself. One practical note: the tool needs outbound port 25 open to contact mail servers, which many cloud providers block by default. The README suggests using an SMTP proxy service if you plan to run checks at any volume.

Copy-paste prompts

Prompt 1
I'm running the reacherhq/check-if-email-exists Docker container. Write me a JavaScript fetch call that sends an email address to the HTTP API and logs whether it is safe, risky, or invalid.
Prompt 2
Using check-if-email-exists, help me write a Python script that reads a CSV of email addresses and outputs a filtered CSV with only safe addresses.
Prompt 3
I want to add email validation to my sign-up endpoint using the check-if-email-exists HTTP API. Show me how to reject invalid addresses before saving them to a PostgreSQL database.
Prompt 4
My check-if-email-exists checks are returning 'unknown' for many addresses. What does that mean and how should my application handle those results?
Open on GitHub → Explain another repo

← reacherhq on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.