Skip to main content

mailcat


The only cat who can find existing email addresses by nickname.

Install

From PyPI (recommended):

pip install mailcat-osint

From source:

git clone https://github.com/sharsil/mailcat
cd mailcat
pip install .

Usage

Run it with a username:

mailcat username

Or as a module:

python -m mailcat username

It's recommended to run mailcat through Tor or a proxy — see Routing through Tor below.

mailcat --tor username
proxychains4 -q mailcat username

mailcat username --proxy http://1.2.3.4:8080

Batch mode

You can check multiple usernames in one run.

Pass several usernames as positional arguments:

mailcat alice bob charlie

Or supply a file with one username (or email address) per line:

mailcat --file usernames.txt

File format example:

alice
bob@proton.me
charlie

You can also combine both — positional names are merged with those from the file:

mailcat alice --file more_users.txt

When more than one username is resolved, a header is printed before each result block so the output is easy to follow:

[*] Checking username: alice
...
[*] Checking username: bob
...

Supported providers

26 active providers covering > 158 domains (plus ~50 Posteo alias domains). Active checks run by default; deprecated checks remain in the source for revival but are skipped on a default run. See the comment block above each function in src/mailcat/__init__.py for the upstream change that broke it and notes on how to revive it.

Name Domains Method Status
Gmail gmail.com SMTP Active
Yandex yandex.ru + 5 aliases SMTP Active
Protonmail protonmail.com + 3 aliases API Active
MailRu mail.ru + 4 other domains Registration Active
Rambler rambler.ru + 5 other domains Registration Active
Yahoo yahoo.com Registration Active
AOL aol.com Registration Active
Outlook outlook.com, hotmail.com, live.com, outlook.de, msn.com MSA credential lookup Active
Zoho zohomail.com Registration Active
Eclipso eclipso.eu + 9 other domains Registration Active
Posteo posteo.net + ~50 aliases Registration Active
Firemail firemail.de + 2 other domains Registration Active
Fastmail fastmail.com Headless Chromium Active
StartMail startmail.com Registration Active
Ukrnet ukr.net Registration Active
Runbox runbox.com + 29 other domains Registration Active
DuckGo duck.com Registration Active
emailn emailn.de Registration Active
aikq aikq.de + 40 other domains Registration Active
Vivaldi vivaldi.net Registration Active
mailDe mail.de SMTP Active
int.pl int.pl Headless Chromium Active
Interia interia.pl + 10 other domains Password recovery Active
t.pl t.pl + 8 other domains Registration Active
onet.pl onet.pl + 15 other domains Headless Chromium Active
Mailum cyberfear.com, mailum.com Registration Active
iCloud icloud.com, me.com, mac.com Account recovery Deprecated
HushMail hushmail.com + 5 other domains Registration Deprecated
Xmail xmail.net Registration Deprecated
Tutanota tutanota.com + 4 other domains Registration Deprecated
Mailbox.org mailbox.org Registration Deprecated
WP wp.pl Registration Deprecated
O2 o2.pl Registration Deprecated
Gazeta.pl gazeta.pl Registration Deprecated

Troubleshooting

Use -m or --max-connections if you get connection errors (Mailcat does 10 parallel connections max by default).

Routing through Tor

The SMTP-based checks (gmail, yandex, mailDe) reach the destination provider's MX servers on TCP port 25. Most residential ISPs and every major cloud provider (AWS, GCP, Azure, Heroku, …) block outbound port 25 as an anti-spam measure, so these checks will time out with messages like:

Error while checking gmail: Timed out connecting to gmail-smtp-in.l.google.com. on port 25

Tor exit nodes generally do not have port 25 blocked, which makes routing through Tor the easiest fix. Mailcat has built-in Tor support via the --tor flag — it expects a SOCKS5 proxy at 127.0.0.1:9050 (the default when you run tor locally).

# 1. Start Tor (macOS / Linux)
brew install tor && tor &        # macOS
sudo systemctl start tor          # Linux with systemd

# 2. Run mailcat through Tor — SMTP checks now succeed
mailcat alex --tor

# Or restrict to just the providers that need it
mailcat alex --tor -p gmail -p yandex -p mailDe

Tor adds ~5–15 s of latency per request, but it is the only reliable way to make the SMTP-25 checks work from a typical home or cloud environment. A clean VPS with unblocked egress 25 (Hetzner after verification, OVH, Vultr) works equally well — point mailcat at it via --proxy or just run mailcat on the VPS itself.

The HTTP-based checks (everything else) work fine from any network and do not require Tor.

SOWEL classification

This tool uses the following OSINT techniques:

Mentions and articles

OSINTEditor Sunday Briefing: Sensational Headlines and Kuomintang Chairmanship Elections

Michael Buzzel: 237 - The Huge OSINT Show by The Privacy, Security, & OSINT Show

bellingcat: First Steps to Getting Started in Open Source Research

OS2INT verifying email addresses using Mailcat

hwosint - Twitter post

Metadata

Release files for mailcat-osint 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mailcat-osint 0.1.1
File Size Uploaded Provenance Actions
mailcat_osint-0.1.1.tar.gz 54.1 kB Without provenance Details for mailcat_osint-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for mailcat-osint 0.1.1
File Interpreter ABI Platform Actions
mailcat_osint-0.1.1-py3-none-any.whl Python 3 none any Details for mailcat_osint-0.1.1-py3-none-any.whl

Total release size: 84.0 kB

Release files / mailcat_osint-0.1.1.tar.gz

Download URL mailcat_osint-0.1.1.tar.gz
Size 54.1 kB
Tags Source
SHA-256 checksum
How to use checksums
4113c5a53d259ba909218d9b28eb31f31095e3f63159ea57f57551f07277fd2b
BLAKE2b-256 checksum
How to use checksums
9c91819bf55281a148e70922c950ed5848c88561ab23448916f901012e12c251
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.9

Release files / mailcat_osint-0.1.1-py3-none-any.whl

Download URL mailcat_osint-0.1.1-py3-none-any.whl
Size 29.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f07979c1a660c226214999e0b2999d6f8fe93127c43d9c510c4a55fe7f5295ae
BLAKE2b-256 checksum
How to use checksums
b9e5680f85eeb37bf78767088bd5ff377cca94f6b1f6753b86ae50a1abc2f1e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.9

Security for mailcat-osint 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page