email-verifier
Verify email address deliverability via SMTP without sending mail. Checks MX records, performs RCPT TO verification, and detects catch-all domains. Use when validating email lists, checking if an email address exists before sending, cleaning lead lists, or verifying contact information. Supports single emails, batch verification, and CSV input.
Install via CLI (Recommended)
clawhub install openclaw/skills/skills/psyduckler/email-verifierEmail Verifier
Verify 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.
How It Works
- MX Lookup — Resolves the domain's mail exchange server
- SMTP Handshake — Connects to the MX server on port 25
- RCPT TO Check — Asks the server if it would accept mail for the address
- Catch-All Detection — Tests a random address to detect catch-all domains
Dependencies
pip3 install dnspython
Usage
Single or multiple emails
python3 scripts/verify_email.py [email protected] [email protected]
From stdin
echo "[email protected]" | python3 scripts/verify_email.py --stdin
From CSV (e.g., a lead list)
python3 scripts/verify_email.py --csv leads.csv --email-column "Contact Email"
Options
--helo DOMAIN— HELO domain for SMTP greeting (default: verify.local)--timeout SECONDS— Connection timeout (default: 10)
Output
JSON array to stdout. Each result contains:
{
"email": "[email protected]",
"domain": "example.com",
"mx_host": "aspmx.l.google.com",
"smtp_code": 250,
"smtp_response": "2.1.5 OK",
"deliverable": "yes"
}
Deliverability values
| 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) |
Rate Limiting
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 protected]
# Aggressive (not recommended from residential IPs)
python3 scripts/verify_email.py --delay 0.5 --max-per-domain 50 [email protected]
Options
--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)
Why rate limiting matters
Metadata
Not sure this is the right skill?
Describe what you want to build — we'll match you to the best skill from 16,000+ options.
Find the right skillPaste this into your clawhub.json to enable this plugin.
{
"plugins": {
"official-psyduckler-email-verifier": {
"enabled": true,
"auto_update": true
}
}
}Related Skills
lead-scorer
Score leads 0-100 by analyzing a domain's website, DNS, sitemap, and social presence. Uses customizable JSON scoring profiles so users can define what signals matter for their brand. Use when qualifying leads, prioritizing outreach lists, or evaluating potential partners. Supports single domains, multiple domains, and CSV batch mode.
reddit-quote-topaz
Create an Instagram carousel from a popular-picks list with Reddit quotes + Topaz 2x upscaling. Cover = "clean" style ("Top CATEGORY in Destination"), attraction slides = "quote" style with Reddit quotes + subreddit attribution. All photos Topaz-enhanced before overlay. Trigger phrase "reddit-quote-topaz". Use when Bernard says "reddit-quote-topaz" or wants a Topaz-enhanced Reddit-quote carousel.
instagram-photo-text-overlay
Overlay text on photos for Instagram posts. Generates portrait (4:5) images with gradient overlays, titles, and optional numbered lists. Use when creating Instagram content that needs text on top of a photo — destination itineraries, top-5 lists, travel highlights, or any branded social image with text overlay.
itinerary-carousel-post
Create and publish an Instagram carousel post from a tabiji.ai itinerary. Given an itinerary URL, finds Instagram-worthy photos for the destination + top attractions, applies text overlays, and publishes as a carousel. Use when asked to create an Instagram post, carousel, or social content for a tabiji destination or itinerary.
aeo-content-free
Create or refresh AEO-optimized content that gets cited by AI assistants (Gemini, ChatGPT, Perplexity) using only free tools. Two modes: CREATE new content targeting a specific prompt, or REFRESH existing content to improve AI citation-worthiness. Researches what AI models currently cite, builds a competitive brief, and produces citation-worthy content. Use when a user wants to: write content optimized for AI citations, create articles that show up in AI answers, refresh/update existing content for better AI visibility, build authority content for answer engines, or produce AEO content without paid tools. No API keys required — uses web_fetch, web_search (free tier), and LLM reasoning only. Pairs with aeo-prompt-research-free (which identifies WHAT to write about; this skill handles HOW to write or refresh it).