Install
openclaw skills install email-verifierVerify email address deliverability via SMTP without sending mail. Checks MX records, performs RCPT TO verification, and detects catch-all domains. Use when...
openclaw skills install email-verifierVerify whether email addresses are deliverable by connecting to the recipient's mail server and checking if it accepts the address — without actually sending any mail.
pip3 install dnspython
python3 scripts/verify_email.py user@example.com another@domain.com
echo "user@example.com" | python3 scripts/verify_email.py --stdin
python3 scripts/verify_email.py --csv leads.csv --email-column "Contact Email"
--helo DOMAIN — HELO domain for SMTP greeting (default: verify.local)--timeout SECONDS — Connection timeout (default: 10)JSON array to stdout. Each result contains:
{
"email": "user@example.com",
"domain": "example.com",
"mx_host": "aspmx.l.google.com",
"smtp_code": 250,
"smtp_response": "2.1.5 OK",
"deliverable": "yes"
}
| Value | Meaning |
|---|---|
yes | Server accepted the recipient |
no | Server rejected the recipient (invalid) |
catch-all | Server accepts all addresses — cannot confirm inbox exists |
unknown | Could not determine (timeout, block, greylisting) |
The script includes built-in rate limiting to protect your IP reputation:
# Defaults: 1s between checks, max 20 per domain before 30s pause
python3 scripts/verify_email.py --csv leads.csv --email-column "Contact Email"
# Conservative: slower checks, lower burst limit
python3 scripts/verify_email.py --delay 3 --max-per-domain 10 --burst-pause 60 email@example.com
# Aggressive (not recommended from residential IPs)
python3 scripts/verify_email.py --delay 0.5 --max-per-domain 50 email@example.com
--delay SECONDS — Pause between each check (default: 1.0)--max-per-domain N — Max checks to one domain before pausing (default: 20)--burst-pause SECONDS — How long to pause after hitting the per-domain limit (default: 30)SMTP verification connects directly to mail servers. Without rate limiting:
| Scenario | Recommended settings |
|---|---|
| Quick spot check (1-5 emails) | Defaults are fine |
| Small lead list (10-50 emails) | --delay 2 --max-per-domain 15 |
| Larger batch (50-200 emails) | --delay 3 --max-per-domain 10 --burst-pause 60 |
| Bulk verification (200+) | Use a dedicated service (ZeroBounce, NeverBounce) instead |
Rule of thumb: Stay under 50 unique domain checks per day from a residential IP. For repeated checks to the same domain (pattern guessing), stay under 15 per session.