{
  "schemaVersion": "1.0",
  "item": {
    "slug": "imap-smtp-email",
    "name": "imap-smtp-email",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/gzlicanyi/imap-smtp-email",
    "canonicalUrl": "https://clawhub.ai/gzlicanyi/imap-smtp-email",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/imap-smtp-email",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=imap-smtp-email",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "setup.sh",
      "package.json",
      "scripts/config.js",
      "scripts/smtp.js",
      "scripts/imap.js"
    ],
    "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/imap-smtp-email"
    },
    "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/imap-smtp-email",
    "agentPageUrl": "https://openagent3.xyz/skills/imap-smtp-email/agent",
    "manifestUrl": "https://openagent3.xyz/skills/imap-smtp-email/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/imap-smtp-email/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": "IMAP/SMTP Email Tool",
        "body": "Read, search, and manage email via IMAP protocol. Send email via SMTP. Supports Gmail, Outlook, 163.com, vip.163.com, 126.com, vip.126.com, 188.com, vip.188.com, and any standard IMAP/SMTP server."
      },
      {
        "title": "Configuration",
        "body": "Run the setup script to configure your email account:\n\nbash setup.sh\n\nConfiguration is stored at ~/.config/imap-smtp-email/.env (survives skill updates). If no config is found there, the skill falls back to a .env file in the skill directory (for backward compatibility)."
      },
      {
        "title": "Config file format",
        "body": "# Default account (no prefix)\nIMAP_HOST=imap.gmail.com\nIMAP_PORT=993\nIMAP_USER=your@email.com\nIMAP_PASS=your_password\nIMAP_TLS=true\nIMAP_REJECT_UNAUTHORIZED=true\nIMAP_MAILBOX=INBOX\n\nSMTP_HOST=smtp.gmail.com\nSMTP_PORT=587\nSMTP_SECURE=false\nSMTP_USER=your@email.com\nSMTP_PASS=your_password\nSMTP_FROM=your@email.com\nSMTP_REJECT_UNAUTHORIZED=true\n\n# File access whitelist (security)\nALLOWED_READ_DIRS=~/Downloads,~/Documents\nALLOWED_WRITE_DIRS=~/Downloads"
      },
      {
        "title": "Multi-Account",
        "body": "You can configure additional email accounts in the same config file. Each account uses a name prefix (uppercase) on all variables."
      },
      {
        "title": "Adding an account",
        "body": "Run the setup script and choose \"Add a new account\":\n\nbash setup.sh\n\nOr manually add prefixed variables to ~/.config/imap-smtp-email/.env:\n\n# Work account (WORK_ prefix)\nWORK_IMAP_HOST=imap.company.com\nWORK_IMAP_PORT=993\nWORK_IMAP_USER=me@company.com\nWORK_IMAP_PASS=password\nWORK_IMAP_TLS=true\nWORK_IMAP_REJECT_UNAUTHORIZED=true\nWORK_IMAP_MAILBOX=INBOX\nWORK_SMTP_HOST=smtp.company.com\nWORK_SMTP_PORT=587\nWORK_SMTP_SECURE=false\nWORK_SMTP_USER=me@company.com\nWORK_SMTP_PASS=password\nWORK_SMTP_FROM=me@company.com\nWORK_SMTP_REJECT_UNAUTHORIZED=true"
      },
      {
        "title": "Using a named account",
        "body": "Add --account <name> before the command:\n\nnode scripts/imap.js --account work check\nnode scripts/smtp.js --account work send --to foo@bar.com --subject Hi --body Hello\n\nWithout --account, the default (unprefixed) account is used."
      },
      {
        "title": "Account name rules",
        "body": "Letters and digits only (e.g., work, 163, personal2)\nCase-insensitive: work and WORK refer to the same account\nThe prefix in .env is always uppercase (e.g., WORK_IMAP_HOST)\nALLOWED_READ_DIRS and ALLOWED_WRITE_DIRS are shared across all accounts (always unprefixed)"
      },
      {
        "title": "Common Email Servers",
        "body": "ProviderIMAP HostIMAP PortSMTP HostSMTP Port163.comimap.163.com993smtp.163.com465vip.163.comimap.vip.163.com993smtp.vip.163.com465126.comimap.126.com993smtp.126.com465vip.126.comimap.vip.126.com993smtp.vip.126.com465188.comimap.188.com993smtp.188.com465vip.188.comimap.vip.188.com993smtp.vip.188.com465yeah.netimap.yeah.net993smtp.yeah.net465Gmailimap.gmail.com993smtp.gmail.com587Outlookoutlook.office365.com993smtp.office365.com587QQ Mailimap.qq.com993smtp.qq.com587\n\nImportant for Gmail:\n\nGmail does not accept your regular account password\nYou must generate an App Password: https://myaccount.google.com/apppasswords\nUse the generated 16-character App Password as IMAP_PASS / SMTP_PASS\nRequires Google Account with 2-Step Verification enabled\n\nImportant for 163.com:\n\nUse authorization code (授权码), not account password\nEnable IMAP/SMTP in web settings first"
      },
      {
        "title": "check",
        "body": "Check for new/unread emails.\n\nnode scripts/imap.js [--account <name>] check [--limit 10] [--mailbox INBOX] [--recent 2h]\n\nOptions:\n\n--limit <n>: Max results (default: 10)\n--mailbox <name>: Mailbox to check (default: INBOX)\n--recent <time>: Only show emails from last X time (e.g., 30m, 2h, 7d)"
      },
      {
        "title": "fetch",
        "body": "Fetch full email content by UID.\n\nnode scripts/imap.js [--account <name>] fetch <uid> [--mailbox INBOX]"
      },
      {
        "title": "download",
        "body": "Download all attachments from an email, or a specific attachment.\n\nnode scripts/imap.js [--account <name>] download <uid> [--mailbox INBOX] [--dir <path>] [--file <filename>]\n\nOptions:\n\n--mailbox <name>: Mailbox (default: INBOX)\n--dir <path>: Output directory (default: current directory)\n--file <filename>: Download only the specified attachment (default: download all)"
      },
      {
        "title": "search",
        "body": "Search emails with filters.\n\nnode scripts/imap.js [--account <name>] search [options]\n\nOptions:\n  --unseen           Only unread messages\n  --seen             Only read messages\n  --from <email>     From address contains\n  --subject <text>   Subject contains\n  --recent <time>    From last X time (e.g., 30m, 2h, 7d)\n  --since <date>     After date (YYYY-MM-DD)\n  --before <date>    Before date (YYYY-MM-DD)\n  --limit <n>        Max results (default: 20)\n  --mailbox <name>   Mailbox to search (default: INBOX)"
      },
      {
        "title": "mark-read / mark-unread",
        "body": "Mark message(s) as read or unread.\n\nnode scripts/imap.js [--account <name>] mark-read <uid> [uid2 uid3...]\nnode scripts/imap.js [--account <name>] mark-unread <uid> [uid2 uid3...]"
      },
      {
        "title": "list-mailboxes",
        "body": "List all available mailboxes/folders.\n\nnode scripts/imap.js [--account <name>] list-mailboxes"
      },
      {
        "title": "list-accounts",
        "body": "List all configured email accounts.\n\nnode scripts/imap.js list-accounts\nnode scripts/smtp.js list-accounts\n\nShows account name, email address, server addresses, and configuration status."
      },
      {
        "title": "send",
        "body": "Send email via SMTP.\n\nnode scripts/smtp.js [--account <name>] send --to <email> --subject <text> [options]\n\nRequired:\n\n--to <email>: Recipient (comma-separated for multiple)\n--subject <text>: Email subject, or --subject-file <file>\n\nOptional:\n\n--body <text>: Plain text body\n--html: Send body as HTML\n--body-file <file>: Read body from file\n--html-file <file>: Read HTML from file\n--cc <email>: CC recipients\n--bcc <email>: BCC recipients\n--attach <file>: Attachments (comma-separated)\n--from <email>: Override default sender\n\nExamples:\n\n# Simple text email\nnode scripts/smtp.js send --to recipient@example.com --subject \"Hello\" --body \"World\"\n\n# HTML email\nnode scripts/smtp.js send --to recipient@example.com --subject \"Newsletter\" --html --body \"<h1>Welcome</h1>\"\n\n# Email with attachment\nnode scripts/smtp.js send --to recipient@example.com --subject \"Report\" --body \"Please find attached\" --attach report.pdf\n\n# Multiple recipients\nnode scripts/smtp.js send --to \"a@example.com,b@example.com\" --cc \"c@example.com\" --subject \"Update\" --body \"Team update\""
      },
      {
        "title": "test",
        "body": "Test SMTP connection by sending a test email to yourself.\n\nnode scripts/smtp.js [--account <name>] test"
      },
      {
        "title": "Dependencies",
        "body": "npm install"
      },
      {
        "title": "Security Notes",
        "body": "Configuration is stored at ~/.config/imap-smtp-email/.env with 600 permissions (owner read/write only)\nGmail: regular password is rejected — generate an App Password at https://myaccount.google.com/apppasswords\nFor 163.com: use authorization code (授权码), not account password"
      },
      {
        "title": "Troubleshooting",
        "body": "Connection timeout:\n\nVerify server is running and accessible\nCheck host/port configuration\n\nAuthentication failed:\n\nVerify username (usually full email address)\nCheck password is correct\nFor 163.com: use authorization code, not account password\nFor Gmail: regular password won't work — generate an App Password at https://myaccount.google.com/apppasswords\n\nTLS/SSL errors:\n\nMatch IMAP_TLS/SMTP_SECURE setting to server requirements\nFor self-signed certs: set IMAP_REJECT_UNAUTHORIZED=false or SMTP_REJECT_UNAUTHORIZED=false"
      }
    ],
    "body": "IMAP/SMTP Email Tool\n\nRead, search, and manage email via IMAP protocol. Send email via SMTP. Supports Gmail, Outlook, 163.com, vip.163.com, 126.com, vip.126.com, 188.com, vip.188.com, and any standard IMAP/SMTP server.\n\nConfiguration\n\nRun the setup script to configure your email account:\n\nbash setup.sh\n\n\nConfiguration is stored at ~/.config/imap-smtp-email/.env (survives skill updates). If no config is found there, the skill falls back to a .env file in the skill directory (for backward compatibility).\n\nConfig file format\n# Default account (no prefix)\nIMAP_HOST=imap.gmail.com\nIMAP_PORT=993\nIMAP_USER=your@email.com\nIMAP_PASS=your_password\nIMAP_TLS=true\nIMAP_REJECT_UNAUTHORIZED=true\nIMAP_MAILBOX=INBOX\n\nSMTP_HOST=smtp.gmail.com\nSMTP_PORT=587\nSMTP_SECURE=false\nSMTP_USER=your@email.com\nSMTP_PASS=your_password\nSMTP_FROM=your@email.com\nSMTP_REJECT_UNAUTHORIZED=true\n\n# File access whitelist (security)\nALLOWED_READ_DIRS=~/Downloads,~/Documents\nALLOWED_WRITE_DIRS=~/Downloads\n\nMulti-Account\n\nYou can configure additional email accounts in the same config file. Each account uses a name prefix (uppercase) on all variables.\n\nAdding an account\n\nRun the setup script and choose \"Add a new account\":\n\nbash setup.sh\n\n\nOr manually add prefixed variables to ~/.config/imap-smtp-email/.env:\n\n# Work account (WORK_ prefix)\nWORK_IMAP_HOST=imap.company.com\nWORK_IMAP_PORT=993\nWORK_IMAP_USER=me@company.com\nWORK_IMAP_PASS=password\nWORK_IMAP_TLS=true\nWORK_IMAP_REJECT_UNAUTHORIZED=true\nWORK_IMAP_MAILBOX=INBOX\nWORK_SMTP_HOST=smtp.company.com\nWORK_SMTP_PORT=587\nWORK_SMTP_SECURE=false\nWORK_SMTP_USER=me@company.com\nWORK_SMTP_PASS=password\nWORK_SMTP_FROM=me@company.com\nWORK_SMTP_REJECT_UNAUTHORIZED=true\n\nUsing a named account\n\nAdd --account <name> before the command:\n\nnode scripts/imap.js --account work check\nnode scripts/smtp.js --account work send --to foo@bar.com --subject Hi --body Hello\n\n\nWithout --account, the default (unprefixed) account is used.\n\nAccount name rules\nLetters and digits only (e.g., work, 163, personal2)\nCase-insensitive: work and WORK refer to the same account\nThe prefix in .env is always uppercase (e.g., WORK_IMAP_HOST)\nALLOWED_READ_DIRS and ALLOWED_WRITE_DIRS are shared across all accounts (always unprefixed)\nCommon Email Servers\nProvider\tIMAP Host\tIMAP Port\tSMTP Host\tSMTP Port\n163.com\timap.163.com\t993\tsmtp.163.com\t465\nvip.163.com\timap.vip.163.com\t993\tsmtp.vip.163.com\t465\n126.com\timap.126.com\t993\tsmtp.126.com\t465\nvip.126.com\timap.vip.126.com\t993\tsmtp.vip.126.com\t465\n188.com\timap.188.com\t993\tsmtp.188.com\t465\nvip.188.com\timap.vip.188.com\t993\tsmtp.vip.188.com\t465\nyeah.net\timap.yeah.net\t993\tsmtp.yeah.net\t465\nGmail\timap.gmail.com\t993\tsmtp.gmail.com\t587\nOutlook\toutlook.office365.com\t993\tsmtp.office365.com\t587\nQQ Mail\timap.qq.com\t993\tsmtp.qq.com\t587\n\nImportant for Gmail:\n\nGmail does not accept your regular account password\nYou must generate an App Password: https://myaccount.google.com/apppasswords\nUse the generated 16-character App Password as IMAP_PASS / SMTP_PASS\nRequires Google Account with 2-Step Verification enabled\n\nImportant for 163.com:\n\nUse authorization code (授权码), not account password\nEnable IMAP/SMTP in web settings first\nIMAP Commands (Receiving Email)\ncheck\n\nCheck for new/unread emails.\n\nnode scripts/imap.js [--account <name>] check [--limit 10] [--mailbox INBOX] [--recent 2h]\n\n\nOptions:\n\n--limit <n>: Max results (default: 10)\n--mailbox <name>: Mailbox to check (default: INBOX)\n--recent <time>: Only show emails from last X time (e.g., 30m, 2h, 7d)\nfetch\n\nFetch full email content by UID.\n\nnode scripts/imap.js [--account <name>] fetch <uid> [--mailbox INBOX]\n\ndownload\n\nDownload all attachments from an email, or a specific attachment.\n\nnode scripts/imap.js [--account <name>] download <uid> [--mailbox INBOX] [--dir <path>] [--file <filename>]\n\n\nOptions:\n\n--mailbox <name>: Mailbox (default: INBOX)\n--dir <path>: Output directory (default: current directory)\n--file <filename>: Download only the specified attachment (default: download all)\nsearch\n\nSearch emails with filters.\n\nnode scripts/imap.js [--account <name>] search [options]\n\nOptions:\n  --unseen           Only unread messages\n  --seen             Only read messages\n  --from <email>     From address contains\n  --subject <text>   Subject contains\n  --recent <time>    From last X time (e.g., 30m, 2h, 7d)\n  --since <date>     After date (YYYY-MM-DD)\n  --before <date>    Before date (YYYY-MM-DD)\n  --limit <n>        Max results (default: 20)\n  --mailbox <name>   Mailbox to search (default: INBOX)\n\nmark-read / mark-unread\n\nMark message(s) as read or unread.\n\nnode scripts/imap.js [--account <name>] mark-read <uid> [uid2 uid3...]\nnode scripts/imap.js [--account <name>] mark-unread <uid> [uid2 uid3...]\n\nlist-mailboxes\n\nList all available mailboxes/folders.\n\nnode scripts/imap.js [--account <name>] list-mailboxes\n\nlist-accounts\n\nList all configured email accounts.\n\nnode scripts/imap.js list-accounts\nnode scripts/smtp.js list-accounts\n\n\nShows account name, email address, server addresses, and configuration status.\n\nSMTP Commands (Sending Email)\nsend\n\nSend email via SMTP.\n\nnode scripts/smtp.js [--account <name>] send --to <email> --subject <text> [options]\n\n\nRequired:\n\n--to <email>: Recipient (comma-separated for multiple)\n--subject <text>: Email subject, or --subject-file <file>\n\nOptional:\n\n--body <text>: Plain text body\n--html: Send body as HTML\n--body-file <file>: Read body from file\n--html-file <file>: Read HTML from file\n--cc <email>: CC recipients\n--bcc <email>: BCC recipients\n--attach <file>: Attachments (comma-separated)\n--from <email>: Override default sender\n\nExamples:\n\n# Simple text email\nnode scripts/smtp.js send --to recipient@example.com --subject \"Hello\" --body \"World\"\n\n# HTML email\nnode scripts/smtp.js send --to recipient@example.com --subject \"Newsletter\" --html --body \"<h1>Welcome</h1>\"\n\n# Email with attachment\nnode scripts/smtp.js send --to recipient@example.com --subject \"Report\" --body \"Please find attached\" --attach report.pdf\n\n# Multiple recipients\nnode scripts/smtp.js send --to \"a@example.com,b@example.com\" --cc \"c@example.com\" --subject \"Update\" --body \"Team update\"\n\ntest\n\nTest SMTP connection by sending a test email to yourself.\n\nnode scripts/smtp.js [--account <name>] test\n\nDependencies\nnpm install\n\nSecurity Notes\nConfiguration is stored at ~/.config/imap-smtp-email/.env with 600 permissions (owner read/write only)\nGmail: regular password is rejected — generate an App Password at https://myaccount.google.com/apppasswords\nFor 163.com: use authorization code (授权码), not account password\nTroubleshooting\n\nConnection timeout:\n\nVerify server is running and accessible\nCheck host/port configuration\n\nAuthentication failed:\n\nVerify username (usually full email address)\nCheck password is correct\nFor 163.com: use authorization code, not account password\nFor Gmail: regular password won't work — generate an App Password at https://myaccount.google.com/apppasswords\n\nTLS/SSL errors:\n\nMatch IMAP_TLS/SMTP_SECURE setting to server requirements\nFor self-signed certs: set IMAP_REJECT_UNAUTHORIZED=false or SMTP_REJECT_UNAUTHORIZED=false"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/gzlicanyi/imap-smtp-email",
    "publisherUrl": "https://clawhub.ai/gzlicanyi/imap-smtp-email",
    "owner": "gzlicanyi",
    "version": "0.0.10",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/imap-smtp-email",
    "downloadUrl": "https://openagent3.xyz/downloads/imap-smtp-email",
    "agentUrl": "https://openagent3.xyz/skills/imap-smtp-email/agent",
    "manifestUrl": "https://openagent3.xyz/skills/imap-smtp-email/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/imap-smtp-email/agent.md"
  }
}