{
  "schemaVersion": "1.0",
  "item": {
    "slug": "email-verifier",
    "name": "Email Verifier",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/psyduckler/email-verifier",
    "canonicalUrl": "https://clawhub.ai/psyduckler/email-verifier",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/email-verifier",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=email-verifier",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/verify_email.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/email-verifier"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/email-verifier",
    "agentPageUrl": "https://openagent3.xyz/skills/email-verifier/agent",
    "manifestUrl": "https://openagent3.xyz/skills/email-verifier/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/email-verifier/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Email Verifier",
        "body": "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."
      },
      {
        "title": "How It Works",
        "body": "MX Lookup — Resolves the domain's mail exchange server\nSMTP Handshake — Connects to the MX server on port 25\nRCPT TO Check — Asks the server if it would accept mail for the address\nCatch-All Detection — Tests a random address to detect catch-all domains"
      },
      {
        "title": "Dependencies",
        "body": "pip3 install dnspython"
      },
      {
        "title": "Single or multiple emails",
        "body": "python3 scripts/verify_email.py user@example.com another@domain.com"
      },
      {
        "title": "From stdin",
        "body": "echo \"user@example.com\" | python3 scripts/verify_email.py --stdin"
      },
      {
        "title": "From CSV (e.g., a lead list)",
        "body": "python3 scripts/verify_email.py --csv leads.csv --email-column \"Contact Email\""
      },
      {
        "title": "Options",
        "body": "--helo DOMAIN — HELO domain for SMTP greeting (default: verify.local)\n--timeout SECONDS — Connection timeout (default: 10)"
      },
      {
        "title": "Output",
        "body": "JSON array to stdout. Each result contains:\n\n{\n  \"email\": \"user@example.com\",\n  \"domain\": \"example.com\",\n  \"mx_host\": \"aspmx.l.google.com\",\n  \"smtp_code\": 250,\n  \"smtp_response\": \"2.1.5 OK\",\n  \"deliverable\": \"yes\"\n}"
      },
      {
        "title": "Deliverability values",
        "body": "ValueMeaningyesServer accepted the recipientnoServer rejected the recipient (invalid)catch-allServer accepts all addresses — cannot confirm inbox existsunknownCould not determine (timeout, block, greylisting)"
      },
      {
        "title": "Rate Limiting",
        "body": "The script includes built-in rate limiting to protect your IP reputation:\n\n# Defaults: 1s between checks, max 20 per domain before 30s pause\npython3 scripts/verify_email.py --csv leads.csv --email-column \"Contact Email\"\n\n# Conservative: slower checks, lower burst limit\npython3 scripts/verify_email.py --delay 3 --max-per-domain 10 --burst-pause 60 email@example.com\n\n# Aggressive (not recommended from residential IPs)\npython3 scripts/verify_email.py --delay 0.5 --max-per-domain 50 email@example.com"
      },
      {
        "title": "Options",
        "body": "--delay SECONDS — Pause between each check (default: 1.0)\n--max-per-domain N — Max checks to one domain before pausing (default: 20)\n--burst-pause SECONDS — How long to pause after hitting the per-domain limit (default: 30)"
      },
      {
        "title": "Why rate limiting matters",
        "body": "SMTP verification connects directly to mail servers. Without rate limiting:\n\nYour IP gets blacklisted — Mail servers (especially Gmail, Microsoft) flag IPs that make many rapid RCPT TO requests. Once flagged, your IP may be blocked for hours or permanently.\nPort 25 gets blocked — ISPs monitor outbound port 25 traffic. Unusual volume can trigger automatic blocks.\nGreylisting increases — Servers that see rapid-fire checks start returning temporary failures, making your results less accurate.\nIt looks like spam reconnaissance — Because that's exactly what spammers do. Legitimate use requires responsible pacing."
      },
      {
        "title": "Guidelines for agents",
        "body": "ScenarioRecommended settingsQuick spot check (1-5 emails)Defaults are fineSmall lead list (10-50 emails)--delay 2 --max-per-domain 15Larger batch (50-200 emails)--delay 3 --max-per-domain 10 --burst-pause 60Bulk verification (200+)Use a dedicated service (ZeroBounce, NeverBounce) instead\n\nRule 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."
      },
      {
        "title": "Limitations",
        "body": "Catch-all domains accept all addresses; a \"yes\" doesn't guarantee a real inbox\nSome servers block SMTP verification (disconnect or timeout) — result will be \"unknown\"\nGreylisting temporarily rejects first attempts by design\nRate limiting — don't bulk-verify hundreds from one IP; use a dedicated service for large lists\nPort 25 blocked — some ISPs/networks block outbound port 25; won't work from those environments\nResidential IPs may get flagged if used heavily — for bulk verification, prefer services like ZeroBounce or NeverBounce"
      }
    ],
    "body": "Email Verifier\n\nVerify 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.\n\nHow It Works\nMX Lookup — Resolves the domain's mail exchange server\nSMTP Handshake — Connects to the MX server on port 25\nRCPT TO Check — Asks the server if it would accept mail for the address\nCatch-All Detection — Tests a random address to detect catch-all domains\nDependencies\npip3 install dnspython\n\nUsage\nSingle or multiple emails\npython3 scripts/verify_email.py user@example.com another@domain.com\n\nFrom stdin\necho \"user@example.com\" | python3 scripts/verify_email.py --stdin\n\nFrom CSV (e.g., a lead list)\npython3 scripts/verify_email.py --csv leads.csv --email-column \"Contact Email\"\n\nOptions\n--helo DOMAIN — HELO domain for SMTP greeting (default: verify.local)\n--timeout SECONDS — Connection timeout (default: 10)\nOutput\n\nJSON array to stdout. Each result contains:\n\n{\n  \"email\": \"user@example.com\",\n  \"domain\": \"example.com\",\n  \"mx_host\": \"aspmx.l.google.com\",\n  \"smtp_code\": 250,\n  \"smtp_response\": \"2.1.5 OK\",\n  \"deliverable\": \"yes\"\n}\n\nDeliverability values\nValue\tMeaning\nyes\tServer accepted the recipient\nno\tServer rejected the recipient (invalid)\ncatch-all\tServer accepts all addresses — cannot confirm inbox exists\nunknown\tCould not determine (timeout, block, greylisting)\nRate Limiting\n\nThe script includes built-in rate limiting to protect your IP reputation:\n\n# Defaults: 1s between checks, max 20 per domain before 30s pause\npython3 scripts/verify_email.py --csv leads.csv --email-column \"Contact Email\"\n\n# Conservative: slower checks, lower burst limit\npython3 scripts/verify_email.py --delay 3 --max-per-domain 10 --burst-pause 60 email@example.com\n\n# Aggressive (not recommended from residential IPs)\npython3 scripts/verify_email.py --delay 0.5 --max-per-domain 50 email@example.com\n\nOptions\n--delay SECONDS — Pause between each check (default: 1.0)\n--max-per-domain N — Max checks to one domain before pausing (default: 20)\n--burst-pause SECONDS — How long to pause after hitting the per-domain limit (default: 30)\nWhy rate limiting matters\n\nSMTP verification connects directly to mail servers. Without rate limiting:\n\nYour IP gets blacklisted — Mail servers (especially Gmail, Microsoft) flag IPs that make many rapid RCPT TO requests. Once flagged, your IP may be blocked for hours or permanently.\nPort 25 gets blocked — ISPs monitor outbound port 25 traffic. Unusual volume can trigger automatic blocks.\nGreylisting increases — Servers that see rapid-fire checks start returning temporary failures, making your results less accurate.\nIt looks like spam reconnaissance — Because that's exactly what spammers do. Legitimate use requires responsible pacing.\nGuidelines for agents\nScenario\tRecommended settings\nQuick spot check (1-5 emails)\tDefaults are fine\nSmall lead list (10-50 emails)\t--delay 2 --max-per-domain 15\nLarger batch (50-200 emails)\t--delay 3 --max-per-domain 10 --burst-pause 60\nBulk verification (200+)\tUse a dedicated service (ZeroBounce, NeverBounce) instead\n\nRule 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.\n\nLimitations\nCatch-all domains accept all addresses; a \"yes\" doesn't guarantee a real inbox\nSome servers block SMTP verification (disconnect or timeout) — result will be \"unknown\"\nGreylisting temporarily rejects first attempts by design\nRate limiting — don't bulk-verify hundreds from one IP; use a dedicated service for large lists\nPort 25 blocked — some ISPs/networks block outbound port 25; won't work from those environments\nResidential IPs may get flagged if used heavily — for bulk verification, prefer services like ZeroBounce or NeverBounce"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/psyduckler/email-verifier",
    "publisherUrl": "https://clawhub.ai/psyduckler/email-verifier",
    "owner": "psyduckler",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/email-verifier",
    "downloadUrl": "https://openagent3.xyz/downloads/email-verifier",
    "agentUrl": "https://openagent3.xyz/skills/email-verifier/agent",
    "manifestUrl": "https://openagent3.xyz/skills/email-verifier/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/email-verifier/agent.md"
  }
}