imap-smtp-email@0.0.19
CAUTION· install onlyPublisher claims: "Read and send email via IMAP/SMTP. Check for new/unread messages, fetch content, search mailboxes, mark as read/unread, and send emails with attachments. Supports multiple accounts. Works with any IMAP/SMTP server including Gmail, Outlook, 163.com, vip.163.com, 126.com, vip.126.com, 188.com, and vip" Observed in sandbox: reads credential files.
Coverage
Install scripts ran; no agent task scenario for this bundle.- Tested
- install scripts, with decoy credentials in place · second launch with the clock 45 days ahead · every file read, file written and host contacted by what ran
- Not tested
- use of the skill by an agent
Is [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (2 scenarios; install scripts ran; no agent task scenario for this bundle) on 2026-11-11 and scored it 76/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Access to sensitive file paths; Access to sensitive file paths; Access to sensitive file paths. Summary: reads credential files.
Behavior trace
Honeypot run · 4 s · 2 scenariosStatic findings
If you have an existing `~/.config/imap-smtp-email/.env`, it takes priority over the shared config. The format is:Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const FALLBACK_ENV_PATH = path.resolve(__dirname, '../.env');Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const LEGACY_ENV_PATH = path.join(os.homedir(), '.config', 'imap-smtp-email', '.env');Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const SHARED_ENV_PATH = path.join(os.homedir(), '.config', 'mail-skills', '.env');Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…npm install --production ``` Configuration is stored at `~/.config/mail-skills/.env` (shared with caldav-sync skill, survives skill updates). If no shared config i…Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.console.error(`Error: Account "${accountName}" not found. Check ~/.config/imap-smtp-email/.env or ~/.config/mail-skills/.env`);Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.console.error(`Error: Account "${prefix.toLowerCase()}" not found in config. Check ~/.config/imap-smtp-email/.env`);Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.Or manually add prefixed variables to `~/.config/mail-skills/.env`:Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.throw new Error('ALLOWED_WRITE_DIRS not set in .env. Attachment download is disabled.');Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.SHARED_CONFIG_FILE="$SHARED_CONFIG_DIR/.env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.chmod 600 "$CONFIG_FILE"Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.// Escape a value for safe .env writing: wrap in double quotes if it containsFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.* to the shared ~/.config/mail-skills/.env (PROVIDER/USERNAME/PASSWORD format).Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.* Migrate a legacy ~/.config/imap-smtp-email/.env (IMAP_HOST/IMAP_USER/... format)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.throw new Error('Missing IMAP user or password. Check your config at ~/.config/imap-smtp-email/.env');Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.throw new Error('Missing SMTP configuration. Check your config at ~/.config/imap-smtp-email/.env');Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.chmod 600 "$SHARED_CONFIG_FILE"Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.# Migrate via a node script that parses the legacy .env with dotenv.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.LEGACY_CONFIG_FILE="$LEGACY_CONFIG_DIR/.env"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.npx skills add https://github.com/gzlicanyi/mail-skills -s caldav-syncFix: Pin versions and sources; vendor anything fetched at install time.# Writes to shared config: ~/.config/mail-skills/.envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.throw new Error('ALLOWED_READ_DIRS not set in .env. File read operations are disabled.');Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.Cost to the agent
Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.
What would make this Verified
4 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Reads credential files≈ +27 on the totalThe sandbox saw reads under ~/.ssh, ~/.aws, ~/.npmrc, ~/.config or similar. Read only files inside the project, and only the ones the task needs. Seen: ~/.npmrc.
- Unclaimed publisher≈ +8 on the totalClaim gzlicanyi: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Touches files outside the project≈ +7 on the totalKeep reads and writes inside the working directory, or declare the exact paths in `filesystem:` and explain why in the README.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- File permission modification command≈ +2 on the totalRequest the narrowest permission that works; replace wildcards with the exact paths or hosts.
- npx invocation of non-well-known package≈ +2 on the totalPin versions and sources; vendor anything fetched at install time.